From bd0218c3ee902e0b4b21f4ed7f20cb36872bfd4b Mon Sep 17 00:00:00 2001
From: Julian Bouzas <julian.bouzas@collabora.com>
Date: Fri, 15 May 2020 13:40:25 -0400
Subject: [PATCH] tests: base-test-fixure: make sure core is done before
 destroying it

---
 tests/common/base-test-fixture.h | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/tests/common/base-test-fixture.h b/tests/common/base-test-fixture.h
index 7ebb3ce9..f465a977 100644
--- a/tests/common/base-test-fixture.h
+++ b/tests/common/base-test-fixture.h
@@ -92,11 +92,32 @@ wp_base_test_fixture_setup (WpBaseTestFixture * self, WpBaseTestFlags flags)
   }
 }
 
+static void
+done_callback (WpCore *core, GAsyncResult *res, WpBaseTestFixture *self)
+{
+  g_autoptr (GError) error = NULL;
+  g_assert_true (wp_core_sync_finish (core, res, &error));
+  g_assert_null (error);
+  g_main_loop_quit (self->loop);
+}
+
 static void
 wp_base_test_fixture_teardown (WpBaseTestFixture * self)
 {
-  g_main_context_pop_thread_default (self->context);
+  /* wait for all client core pending tasks to be done */
+  if (self->client_core && wp_core_is_connected (self->client_core)) {
+    wp_core_sync (self->client_core, NULL, (GAsyncReadyCallback) done_callback,
+        self);
+    g_main_loop_run (self->loop);
+  }
 
+  /* wait for all core pending tasks to be done */
+  if (self->core && wp_core_is_connected (self->core)) {
+    wp_core_sync (self->core, NULL, (GAsyncReadyCallback) done_callback, self);
+    g_main_loop_run (self->loop);
+  }
+
+  g_main_context_pop_thread_default (self->context);
   g_clear_object (&self->client_core);
   g_clear_object (&self->core);
   g_clear_pointer (&self->timeout_source, g_source_unref);
-- 
GitLab