diff options
author | Philip Withnall <pwithnall@endlessos.org> | 2022-12-14 09:33:18 +0000 |
---|---|---|
committer | Philip Withnall <pwithnall@endlessos.org> | 2022-12-14 15:49:46 +0000 |
commit | b4c7dc11b6a41b469067cdf830df3b0aa37ec507 (patch) | |
tree | 69ff4fcb07192a0c187cb8509b0044ceab999fad | |
parent | 28ba6672765ee589d82a9c0ab0258bce92cca479 (diff) | |
download | glib-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.c | 14 |
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 |