]> jfr.im git - solanum.git/blobdiff - libratbox/src/event.c
Fix a couple more string leaks.
[solanum.git] / libratbox / src / event.c
index 76f84267a6eac509bdb0e1328812afb0973fa8fe..226bca0a56dc19d94640c211ad424f655f3cefad 100644 (file)
@@ -39,7 +39,7 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
  *  USA
  *
- *  $Id: event.c 26092 2008-09-19 15:13:52Z androsyn $
+ *  $Id: event.c 26272 2008-12-10 05:55:10Z androsyn $
  */
 
 #include <libratbox_config.h>
@@ -94,6 +94,7 @@ rb_event_add(const char *name, EVH * func, void *arg, time_t when)
        ev->name = rb_strndup(name, EV_NAME_LEN);
        ev->arg = arg;
        ev->when = rb_current_time() + when;
+       ev->next = when;
        ev->frequency = when;
 
        if((ev->when < event_time_min) || (event_time_min == -1))
@@ -114,6 +115,7 @@ rb_event_addonce(const char *name, EVH * func, void *arg, time_t when)
        ev->name = rb_strndup(name, EV_NAME_LEN);
        ev->arg = arg;
        ev->when = rb_current_time() + when;
+       ev->next = when;
        ev->frequency = 0;
 
        if((ev->when < event_time_min) || (event_time_min == -1))
@@ -189,9 +191,7 @@ rb_run_event(struct ev_entry *ev)
        ev->func(ev->arg);
        if(!ev->frequency)
        {
-               rb_io_unsched_event(ev);
-               rb_dlinkDelete(&ev->node, &event_list);
-               rb_free(ev);
+               rb_event_delete(ev);
                return;
        }
        ev->when = rb_current_time() + ev->frequency;
@@ -250,15 +250,14 @@ rb_event_io_register_all(void)
 {
        rb_dlink_node *ptr;
        struct ev_entry *ev;
-       int when;
+
        if(!rb_io_supports_event())
                return;
 
        RB_DLINK_FOREACH(ptr, event_list.head)
        {
                ev = ptr->data;
-               when = ev->when - rb_current_time();
-               rb_io_sched_event(ev, when);
+               rb_io_sched_event(ev, ev->next);
        }
 }