[gnome-software: 5/7] shell: Ignore failure to hold the scheduler daemon
- From: Phaedrus Leeds <mwleeds src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 5/7] shell: Ignore failure to hold the scheduler daemon
- Date: Thu, 21 Jan 2021 02:16:04 +0000 (UTC)
commit 3ccb8318c7dd705b9434020baeb3c9b0d49d592b
Author: Philip Withnall <withnall endlessm com>
Date: Fri May 22 14:36:07 2020 +0100
shell: Ignore failure to hold the scheduler daemon
It’s not fatal, it just means that the daemon might go away while
gnome-software is running.
It returns `G_DBUS_ERROR_FAILED` if the client process (gnome-software)
already has a hold on the daemon, so ignore that completely.
Signed-off-by: Philip Withnall <withnall endlessm com>
src/gs-shell.c | 32 ++++++++++++++++++++++----------
1 file changed, 22 insertions(+), 10 deletions(-)
---
diff --git a/src/gs-shell.c b/src/gs-shell.c
index d8ac5efb..4a4e0a2d 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -77,6 +77,7 @@ typedef struct
#ifdef HAVE_MOGWAI
MwscScheduler *scheduler;
+ gboolean scheduler_held;
gulong scheduler_invalidated_handler;
#endif /* HAVE_MOGWAI */
} GsShellPrivate;
@@ -279,6 +280,7 @@ scheduler_invalidated_cb (GsShell *shell)
g_signal_handler_disconnect (priv->scheduler,
priv->scheduler_invalidated_handler);
priv->scheduler_invalidated_handler = 0;
+ priv->scheduler_held = FALSE;
g_clear_object (&priv->scheduler);
}
@@ -299,12 +301,15 @@ scheduler_hold_cb (GObject *source_object,
g_autoptr(GsShell) shell = data; /* reference added when starting the async operation */
GsShellPrivate *priv = gs_shell_get_instance_private (shell);
- if (!mwsc_scheduler_hold_finish (scheduler, result, &error_local)) {
+ if (mwsc_scheduler_hold_finish (scheduler, result, &error_local)) {
+ priv->scheduler_held = TRUE;
+ } else if (!g_error_matches (error_local, G_DBUS_ERROR, G_DBUS_ERROR_FAILED)) {
g_warning ("Couldn't hold the Mogwai Scheduler daemon: %s",
error_local->message);
- return;
}
+ g_clear_error (&error_local);
+
priv->scheduler_invalidated_handler =
g_signal_connect_swapped (scheduler, "invalidated",
(GCallback) scheduler_invalidated_cb,
@@ -336,6 +341,7 @@ scheduler_release_cb (GObject *source_object,
g_warning ("Couldn't release the Mogwai Scheduler daemon: %s",
error_local->message);
+ priv->scheduler_held = FALSE;
g_clear_object (&priv->scheduler);
}
@@ -972,10 +978,13 @@ main_window_closed_cb (GtkWidget *dialog, GdkEvent *event, gpointer user_data)
priv->scheduler_invalidated_handler);
priv->scheduler_invalidated_handler = 0;
- mwsc_scheduler_release_async (priv->scheduler,
- NULL,
- scheduler_release_cb,
- g_object_ref (shell));
+ if (priv->scheduler_held)
+ mwsc_scheduler_release_async (priv->scheduler,
+ NULL,
+ scheduler_release_cb,
+ g_object_ref (shell));
+ else
+ g_clear_object (&priv->scheduler);
}
#endif /* HAVE_MOGWAI */
@@ -2514,10 +2523,13 @@ gs_shell_dispose (GObject *object)
g_signal_handler_disconnect (priv->scheduler,
priv->scheduler_invalidated_handler);
- mwsc_scheduler_release_async (priv->scheduler,
- NULL,
- scheduler_release_cb,
- g_object_ref (shell));
+ if (priv->scheduler_held)
+ mwsc_scheduler_release_async (priv->scheduler,
+ NULL,
+ scheduler_release_cb,
+ g_object_ref (shell));
+ else
+ g_clear_object (&priv->scheduler);
}
#endif /* HAVE_MOGWAI */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]