[glib] tests/mainloop: fix a race condition
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] tests/mainloop: fix a race condition
- Date: Fri, 13 Apr 2012 16:15:41 +0000 (UTC)
commit baf0ebf7b233f05359f59dbee8d73fa15ef09407
Author: Dan Winship <danw gnome org>
Date: Fri Apr 13 11:43:09 2012 -0400
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 files changed, 9 insertions(+), 1 deletions(-)
---
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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]