diff options
Diffstat (limited to 'common/glib-ectomy.c')
-rw-r--r-- | common/glib-ectomy.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/common/glib-ectomy.c b/common/glib-ectomy.c index fe6f524e..f3478edf 100644 --- a/common/glib-ectomy.c +++ b/common/glib-ectomy.c @@ -205,6 +205,20 @@ void g_io_remove_watch(guint id) } } +static struct slist *watch_list_add(struct slist *l, struct watch *watch) +{ + struct slist *cur; + + for (cur = l; cur != NULL; cur = cur->next) { + struct watch *w = cur->data; + + if (w->priority >= watch->priority) + break; + } + + return slist_insert_before(l, cur, watch); +} + guint g_io_add_watch_full(GIOChannel *channel, gint priority, GIOCondition condition, GIOFunc func, gpointer user_data, GDestroyNotify notify) @@ -228,9 +242,9 @@ guint g_io_add_watch_full(GIOChannel *channel, gint priority, watch->destroy = notify; if (context->watch_lock) - context->proc_watches = slist_prepend(context->proc_watches, watch); + context->proc_watches = watch_list_add(context->proc_watches, watch); else - context->watches = slist_prepend(context->watches, watch); + context->watches = watch_list_add(context->watches, watch); return watch->id; } @@ -385,7 +399,7 @@ void g_main_loop_run(GMainLoop *loop) if (!*w->revents) { context->watches = slist_remove(context->watches, w); - context->proc_watches = slist_append(context->proc_watches, w); + context->proc_watches = watch_list_add(context->proc_watches, w); continue; } @@ -403,7 +417,7 @@ void g_main_loop_run(GMainLoop *loop) continue; } - context->proc_watches = slist_append(context->proc_watches, w); + context->proc_watches = watch_list_add(context->proc_watches, w); } context->watches = context->proc_watches; |