summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <pwithnall@endlessos.org>2022-12-14 09:33:18 +0000
committerPhilip Withnall <pwithnall@endlessos.org>2022-12-14 15:49:46 +0000
commitb4c7dc11b6a41b469067cdf830df3b0aa37ec507 (patch)
tree69ff4fcb07192a0c187cb8509b0044ceab999fad
parent28ba6672765ee589d82a9c0ab0258bce92cca479 (diff)
downloadglib-b4c7dc11b6a41b469067cdf830df3b0aa37ec507.tar.gz
tests: Release GApplication a little later to avoid assertion failures
If it takes one more `GMainContext` cycle than expected for the `activate` signals to be handled, the `GApplication` under test can be released too early, and the test will fail due to not seeing a high enough value of `n_activations`. Hopefully avoid that by moving the release to a low priority idle callback. This fix is only hopeful because I’ve only been able to reproduce the failure on FreeBSD CI and not locally. Signed-off-by: Philip Withnall <pwithnall@endlessos.org> Fixes: #2835
-rw-r--r--gio/tests/gapplication.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gio/tests/gapplication.c b/gio/tests/gapplication.c
index a1eb85be7..4320352d1 100644
--- a/gio/tests/gapplication.c
+++ b/gio/tests/gapplication.c
@@ -1207,6 +1207,7 @@ dbus_activate_cb (GApplication *app,
static void dbus_startup_reply_cb (GObject *source_object,
GAsyncResult *result,
gpointer user_data);
+static gboolean dbus_startup_reply_idle_cb (gpointer user_data);
static void
dbus_startup_cb (GApplication *app,
@@ -1241,8 +1242,19 @@ dbus_startup_reply_cb (GObject *source_object,
/* Nothing to check on the reply for now. */
g_clear_object (&reply);
+ /* Release the app in an idle callback, so there’s time to process other
+ * pending sources first. */
+ g_idle_add_full (G_PRIORITY_LOW, dbus_startup_reply_idle_cb, g_steal_pointer (&app), g_object_unref);
+}
+
+static gboolean
+dbus_startup_reply_idle_cb (gpointer user_data)
+{
+ GApplication *app = G_APPLICATION (user_data);
+
g_application_release (app);
- g_clear_object (&app);
+
+ return G_SOURCE_REMOVE;
}
static void