[glib/glib-2-20] Fix a locking problem in g_main_context_iterate()



commit 1f32eb927e2b404d4a697fa55282425ccb4d1784
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed May 27 12:01:14 2009 -0400

    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 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/glib/gmain.c b/glib/gmain.c
index 17866c7..331c0a8 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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]