diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/glib-ectomy.c | 16 | ||||
-rw-r--r-- | common/glib-ectomy.h | 7 |
2 files changed, 13 insertions, 10 deletions
diff --git a/common/glib-ectomy.c b/common/glib-ectomy.c index aa1007ee..fb737642 100644 --- a/common/glib-ectomy.c +++ b/common/glib-ectomy.c @@ -233,7 +233,16 @@ static void timeout_handlers_prepare(GMainContext *context) static int timeout_cmp(const void *t1, const void *t2) { - return t1-t2; + const struct timeout *tout1 = t1; + const struct timeout *tout2 = t2; + + if (!tout2) + return -1; + + if (tout1 != tout2) + return -1; + + return tout1->id - tout2->id; } static void timeout_handlers_check(GMainContext *context) @@ -248,9 +257,7 @@ static void timeout_handlers_check(GMainContext *context) t = l->data; l = l->next; - if ((tv.tv_sec < t->expiration.tv_sec) || - (tv.tv_sec == t->expiration.tv_sec && - tv.tv_usec < t->expiration.tv_usec)) + if (timercmp(&tv, &t->expiration, <)) continue; if (t->function(t->data)) { @@ -372,6 +379,7 @@ guint g_timeout_add(guint interval, GSourceFunc function, gpointer data) if (!t) return 0; + memset(t, 0, sizeof(*t)); t->interval = interval; t->function = function; t->data = data; diff --git a/common/glib-ectomy.h b/common/glib-ectomy.h index 333687b1..f52a9ce2 100644 --- a/common/glib-ectomy.h +++ b/common/glib-ectomy.h @@ -36,15 +36,10 @@ typedef struct _GIOChannel { typedef gboolean (*GSourceFunc) (gpointer data); -typedef struct { - glong tv_sec; - glong tv_usec; -} time_val_t; - struct timeout { guint id; guint interval; - time_val_t expiration; + struct timeval expiration; gpointer data; GSourceFunc function; }; |