]> jfr.im git - solanum.git/blobdiff - librb/src/event.c
Cast time_t to long long when printing
[solanum.git] / librb / src / event.c
index f678e3cce94faf37162a1329f69db52038e5af33..9f90b972606c7c6ddc5207d05fb9db752646b752 100644 (file)
@@ -87,6 +87,7 @@ rb_event_add_common(const char *name, EVH * func, void *arg, time_t when, time_t
        ev->when = rb_current_time() + when;
        ev->next = when;
        ev->frequency = frequency;
+       ev->dead = 0;
 
        if((ev->when < event_time_min) || (event_time_min == -1))
                event_time_min = ev->when;
@@ -142,10 +143,9 @@ rb_event_delete(struct ev_entry *ev)
        if(ev == NULL)
                return;
 
-       rb_dlinkDelete(&ev->node, &event_list);
+       ev->dead = 1;
+
        rb_io_unsched_event(ev);
-       rb_free(ev->name);
-       rb_free(ev);
 }
 
 /*
@@ -228,6 +228,13 @@ rb_event_run(void)
        RB_DLINK_FOREACH_SAFE(ptr, next, event_list.head)
        {
                ev = ptr->data;
+               if (ev->dead)
+               {
+                       rb_dlinkDelete(&ev->node, &event_list);
+                       rb_free(ev->name);
+                       rb_free(ev);
+                       continue;
+               }
                if(ev->when <= rb_current_time())
                {
                        rb_strlcpy(last_event_ran, ev->name, sizeof(last_event_ran));
@@ -243,6 +250,7 @@ rb_event_run(void)
                        else
                        {
                                rb_dlinkDelete(&ev->node, &event_list);
+                               rb_free(ev->name);
                                rb_free(ev);
                        }
                }
@@ -286,23 +294,21 @@ rb_event_init(void)
 void
 rb_dump_events(void (*func) (char *, void *), void *ptr)
 {
-       int len;
        char buf[512];
        rb_dlink_node *dptr;
        struct ev_entry *ev;
-       len = sizeof(buf);
 
-       snprintf(buf, len, "Last event to run: %s", last_event_ran);
+       snprintf(buf, sizeof buf, "Last event to run: %s", last_event_ran);
        func(buf, ptr);
 
-       rb_strlcpy(buf, "Operation                    Next Execution", len);
+       rb_strlcpy(buf, "Operation                    Next Execution", sizeof buf);
        func(buf, ptr);
 
        RB_DLINK_FOREACH(dptr, event_list.head)
        {
                ev = dptr->data;
-               snprintf(buf, len, "%-28s %-4ld seconds (frequency=%d)", ev->name,
-                           ev->when - (long)rb_current_time(), (int)ev->frequency);
+               snprintf(buf, sizeof buf, "%-28s %-4lld seconds (frequency=%d)", ev->name,
+                           (long long)(ev->when - rb_current_time()), (int)ev->frequency);
                func(buf, ptr);
        }
 }