gio/tests/cancellable: fix to still work when running slowly
authorDan Winship <danw@gnome.org>
Fri, 24 Aug 2012 21:11:38 +0000 (17:11 -0400)
committerDan Winship <danw@gnome.org>
Mon, 3 Sep 2012 12:40:14 +0000 (08:40 -0400)
The test was assuming that all cancelled ops would finish within a
certain amount of time, but this often failed under valgrind. Instead,
just run the loop until all of the ops have actually finished.

https://bugzilla.gnome.org/show_bug.cgi?id=682560

gio/tests/cancellable.c

index e4fd098..7c960c7 100644 (file)
@@ -149,6 +149,8 @@ mock_operation_finish (GAsyncResult  *result,
   return data->iterations_done;
 }
 
+GMainLoop *loop;
+
 static void
 on_mock_operation_ready (GObject      *source,
                          GAsyncResult *result,
@@ -166,6 +168,9 @@ on_mock_operation_ready (GObject      *source,
 
   g_assert_cmpint (iterations_requested, >, iterations_done);
   num_async_operations--;
+
+  if (!num_async_operations)
+    g_main_loop_quit (loop);
 }
 
 static gboolean
@@ -181,7 +186,6 @@ test_cancel_multiple_concurrent (void)
 {
   GCancellable *cancellable;
   guint i, iterations;
-  GMainLoop *loop;
 
   cancellable = g_cancellable_new ();
   loop = g_main_loop_new (NULL, FALSE);
@@ -203,8 +207,7 @@ test_cancel_multiple_concurrent (void)
   g_cancellable_cancel (cancellable);
   g_assert (g_cancellable_is_cancelled (cancellable));
 
-  /* Wait for two more iterations, and all threads should be cancelled */
-  g_timeout_add (WAIT_ITERATION * 2, on_main_loop_timeout_quit, loop);
+  /* Wait for all operations to be cancelled */
   g_main_loop_run (loop);
   g_assert_cmpint (num_async_operations, ==, 0);