X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/0e651b144141346edda6703b5bf3f9a238da8130..5c01fc8bd7f859e8af13c89d705510e59cb4270f:/librb/src/event.c diff --git a/librb/src/event.c b/librb/src/event.c index f678e3cc..9f90b972 100644 --- a/librb/src/event.c +++ b/librb/src/event.c @@ -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); } }