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;
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);
}
/*
void
-rb_run_event(struct ev_entry *ev)
+rb_run_one_event(struct ev_entry *ev)
{
rb_strlcpy(last_event_ran, ev->name, sizeof(last_event_ran));
ev->func(ev->arg);
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));
else
{
rb_dlinkDelete(&ev->node, &event_list);
+ rb_free(ev->name);
rb_free(ev);
}
}
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);
}
}