From 00151ec0e1ea5c6b8be13c70a8808bc0ff380e3b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 27 May 2009 12:01:14 -0400 Subject: [PATCH] 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. --- glib/gmain.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/glib/gmain.c b/glib/gmain.c index 17866c7e3..331c0a86b 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);