[librest] tests: Avoid race condition in threaded tests



commit 08f1fc35e3c77aecedacf08aa510e82c91ac7f2a
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Tue Mar 17 15:53:36 2015 +0100

    tests: Avoid race condition in threaded tests
    
    Calling soup_server_run in a new thread, and calling
    soup_server_get_port() on the same SoupServer instance
    right after creating the thread.
    With recent libsoup, this sometimes causes a crash when the 2 threads
    try to call soup_server_ensure_listening() at the same time.
    Moving the call to soup_server_get_port() before the thread creation
    avoids this race condition.

 tests/custom-serialize.c |    4 ++--
 tests/threaded.c         |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
---
diff --git a/tests/custom-serialize.c b/tests/custom-serialize.c
index f683941..c4ca541 100644
--- a/tests/custom-serialize.c
+++ b/tests/custom-serialize.c
@@ -123,10 +123,10 @@ main (int argc, char **argv)
 
   server = soup_server_new (NULL);
   soup_server_add_handler (server, NULL, server_callback, NULL, NULL);
-  g_thread_create ((GThreadFunc)soup_server_run, server, FALSE, NULL);
-
   url = g_strdup_printf ("http://127.0.0.1:%d/";, soup_server_get_port (server));
 
+  g_thread_create ((GThreadFunc)soup_server_run, server, FALSE, NULL);
+
   proxy = rest_proxy_new (url, FALSE);
   call = g_object_new (REST_TYPE_CUSTOM_PROXY_CALL, "proxy", proxy, NULL);
 
diff --git a/tests/threaded.c b/tests/threaded.c
index ecb074f..abb11e7 100644
--- a/tests/threaded.c
+++ b/tests/threaded.c
@@ -90,10 +90,10 @@ main (int argc, char **argv)
 
   server = soup_server_new (NULL);
   soup_server_add_handler (server, NULL, server_callback, NULL, NULL);
-  g_thread_create ((GThreadFunc)soup_server_run, server, FALSE, NULL);
-
   url = g_strdup_printf ("http://127.0.0.1:%d/";, soup_server_get_port (server));
 
+  g_thread_create ((GThreadFunc)soup_server_run, server, FALSE, NULL);
+
   for (i = 0; i < G_N_ELEMENTS (threads); i++) {
     threads[i] = g_thread_create (func, url, TRUE, NULL);
     if (verbose)


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