From: Matthias Clasen Date: Thu, 22 May 2014 21:22:56 +0000 (-0400) Subject: Try to fix mapping-test X-Git-Tag: 2.41.1~64 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=922dd548d5697556b76f720c985728d110ac6b9d;p=platform%2Fupstream%2Fglib.git Try to fix mapping-test The mapping-test is failing under gnome-continuous. I suspect this is simply due to running many tests in parallel, and mapping-test being racy. Replace the blind sleep by signals, to avoid the races. --- diff --git a/tests/mapping-test.c b/tests/mapping-test.c index a85cf80..b3e9778 100644 --- a/tests/mapping-test.c +++ b/tests/mapping-test.c @@ -30,6 +30,8 @@ static gchar *dir, *filename, *displayname, *childname; static gboolean stop = FALSE; +static gint parent_pid; + #ifndef G_OS_WIN32 static void @@ -91,27 +93,39 @@ map_or_die (const gchar *filename, return map; } - + +static gboolean +signal_parent (gpointer data) +{ +#ifndef G_OS_WIN32 + kill (parent_pid, SIGUSR1); +#endif + return G_SOURCE_REMOVE; +} + static int child_main (int argc, char *argv[]) { GMappedFile *map; GMainLoop *loop; + parent_pid = atoi (argv[2]); map = map_or_die (filename, FALSE); - - loop = g_main_loop_new (NULL, FALSE); #ifndef G_OS_WIN32 signal (SIGUSR1, handle_usr1); #endif + loop = g_main_loop_new (NULL, FALSE); g_idle_add (check_stop, loop); + g_idle_add (signal_parent, NULL); g_main_loop_run (loop); write_or_die (childname, g_mapped_file_get_contents (map), g_mapped_file_get_length (map)); + signal_parent (NULL); + return 0; } @@ -168,8 +182,10 @@ test_child_private (gchar *argv0) GMappedFile *map; gchar *buffer; gsize len; - gchar *child_argv[3]; + gchar *child_argv[4]; GPid child_pid; + GMainLoop *loop; + gchar pid[100]; #ifdef G_OS_WIN32 g_remove ("STOP"); @@ -179,9 +195,15 @@ test_child_private (gchar *argv0) write_or_die (filename, "ABC", -1); map = map_or_die (filename, TRUE); +#ifndef G_OS_WIN32 + signal (SIGUSR1, handle_usr1); +#endif + + g_snprintf (pid, sizeof(pid), "%d", getpid ()); child_argv[0] = argv0; child_argv[1] = "mapchild"; - child_argv[2] = NULL; + child_argv[2] = pid; + child_argv[3] = NULL; if (!g_spawn_async (dir, child_argv, NULL, 0, NULL, NULL, &child_pid, &error)) { @@ -190,8 +212,14 @@ test_child_private (gchar *argv0) exit (1); } - /* give the child some time to set up its mapping */ +#ifndef G_OS_WIN32 + loop = g_main_loop_new (NULL, FALSE); + g_idle_add (check_stop, loop); + g_main_loop_run (loop); + stop = FALSE; +#else g_usleep (2000000); +#endif buffer = (gchar *)g_mapped_file_get_contents (map); buffer[0] = '1'; @@ -205,8 +233,12 @@ test_child_private (gchar *argv0) g_file_set_contents ("STOP", "Hey there\n", -1, NULL); #endif - /* give the child some time to write the file */ +#ifndef G_OS_WIN32 + g_idle_add (check_stop, loop); + g_main_loop_run (loop); +#else g_usleep (2000000); +#endif if (!g_file_get_contents (childname, &buffer, &len, &error)) {