From baf0ebf7b233f05359f59dbee8d73fa15ef09407 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Fri, 13 Apr 2012 11:43:09 -0400 Subject: [PATCH] tests/mainloop: fix a race condition Rather than depending on the machine's speed/load, just interlock between the two threads properly. --- glib/tests/mainloop.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c index 614acc6..4d27985 100644 --- a/glib/tests/mainloop.c +++ b/glib/tests/mainloop.c @@ -253,6 +253,9 @@ call_func (gpointer data) return G_SOURCE_REMOVE; } +static GMutex mutex; +static GCond cond; + static gpointer thread_func (gpointer data) { @@ -261,6 +264,10 @@ thread_func (gpointer data) g_main_context_push_thread_default (ctx); + g_mutex_lock (&mutex); + g_cond_signal (&cond); + g_mutex_unlock (&mutex); + source = g_timeout_source_new (500); g_source_set_callback (source, (GSourceFunc)g_thread_exit, NULL, NULL); g_source_attach (source, ctx); @@ -293,9 +300,10 @@ test_invoke (void) * to another thread */ ctx = g_main_context_new (); + g_mutex_lock (&mutex); thread = g_thread_new ("worker", thread_func, ctx); - g_usleep (1000); /* give some time to push the thread-default */ + g_cond_wait (&cond, &mutex); g_main_context_invoke (ctx, func, thread); g_assert_cmpint (count, ==, 2); -- 2.7.4