From: Matthias Clasen Date: Wed, 27 May 2009 16:01:14 +0000 (-0400) Subject: Fix a locking problem in g_main_context_iterate() X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=00151ec0e1ea5c6b8be13c70a8808bc0ff380e3b;p=dana%2Fcg-glib.git Fix a locking problem in g_main_context_iterate() We failed to ensure that the context is locked on every exit of the function. This fixes bug 583324. --- diff --git a/glib/gmain.c b/glib/gmain.c index 17866c7e..331c0a86 100644 --- a/glib/gmain.c +++ b/glib/gmain.c @@ -2382,33 +2382,30 @@ g_main_context_iterate (GMainContext *context, gboolean some_ready; gint nfds, allocated_nfds; GPollFD *fds = NULL; - + UNLOCK_CONTEXT (context); #ifdef G_THREADS_ENABLED if (!g_main_context_acquire (context)) { gboolean got_ownership; - + + LOCK_CONTEXT (context); + g_return_val_if_fail (g_thread_supported (), FALSE); if (!block) return FALSE; - LOCK_CONTEXT (context); - if (!context->cond) context->cond = g_cond_new (); - + got_ownership = g_main_context_wait (context, context->cond, g_static_mutex_get_mutex (&context->mutex)); if (!got_ownership) - { - UNLOCK_CONTEXT (context); - return FALSE; - } + return FALSE; } else LOCK_CONTEXT (context);