[glib] tests: Fix race conditions in mainloop/invoke test



commit 3ac2930e1aabeca7dac7a2570cba24591d97e0d2
Author: Colin Walters <walters verbum org>
Date:   Mon Apr 16 13:55:02 2012 -0400

    tests: Fix race conditions in mainloop/invoke test
    
    1) The test was using GCond incorrectly (it always needs a
       state variable)
    2) The state assertion was racing with the thread; just delete it.
       All we're really trying to test here is that the invoke runs by the
       time the thread is gone, and the function has an assertion that
       it runs in the correct thread.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=674213

 glib/tests/mainloop.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)
---
diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c
index c2ca00c..4986e3d 100644
--- a/glib/tests/mainloop.c
+++ b/glib/tests/mainloop.c
@@ -255,6 +255,7 @@ call_func (gpointer data)
 
 static GMutex mutex;
 static GCond cond;
+static gboolean thread_ready;
 
 static gpointer
 thread_func (gpointer data)
@@ -265,6 +266,7 @@ thread_func (gpointer data)
   g_main_context_push_thread_default (ctx);
 
   g_mutex_lock (&mutex);
+  thread_ready = TRUE;
   g_cond_signal (&cond);
   g_mutex_unlock (&mutex);
 
@@ -300,13 +302,14 @@ test_invoke (void)
    * to another thread
    */
   ctx = g_main_context_new ();
-  g_mutex_lock (&mutex);
   thread = g_thread_new ("worker", thread_func, ctx);
 
-  g_cond_wait (&cond, &mutex);
+  g_mutex_lock (&mutex);
+  while (!thread_ready)
+    g_cond_wait (&cond, &mutex);
+  g_mutex_unlock (&mutex);
 
   g_main_context_invoke (ctx, func, thread);
-  g_assert_cmpint (count, ==, 2);
 
   g_thread_join (thread);
   g_assert_cmpint (count, ==, 3);



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