From 0ecddafc2072e7bd9a0b03f11e71ddd5abd8e526 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 7 May 2020 11:15:46 +0200 Subject: [PATCH] windowManager: Handle return value/errors from systemd unit calls These may produce errors, and return a value indicating we should proceed further. Check for those when starting/stopping gsd-xsettings. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1238 https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2755 --- js/ui/windowManager.js | 54 +++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index ffbec6d83..14c914099 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -900,35 +900,45 @@ var WindowManager = class { global.display.connect('init-xserver', (display, task) => { IBusManager.getIBusManager().restartDaemon(['--xim']); - Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail'); - /* Leave this watchdog timeout so don't block indefinitely here */ - let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => { - Gio.DBus.session.unwatch_name(watchId); - log('Warning: Failed to start gsd-xsettings'); - task.return_boolean(true); - timeoutId = 0; - return GLib.SOURCE_REMOVE; - }); - - /* When gsd-xsettings daemon is started, we are good to resume */ - let watchId = Gio.DBus.session.watch_name( - 'org.gnome.SettingsDaemon.XSettings', - Gio.BusNameWatcherFlags.NONE, - () => { - Gio.DBus.session.unwatch_name(watchId); - if (timeoutId > 0) { + try { + if (Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail')) { + /* Leave this watchdog timeout so don't block indefinitely here */ + let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => { + Gio.DBus.session.unwatch_name(watchId); + log('Warning: Failed to start gsd-xsettings'); task.return_boolean(true); - GLib.source_remove(timeoutId); - } - }, - null); + timeoutId = 0; + return GLib.SOURCE_REMOVE; + }); + + /* When gsd-xsettings daemon is started, we are good to resume */ + let watchId = Gio.DBus.session.watch_name( + 'org.gnome.SettingsDaemon.XSettings', + Gio.BusNameWatcherFlags.NONE, + () => { + Gio.DBus.session.unwatch_name(watchId); + if (timeoutId > 0) { + task.return_boolean(true); + GLib.source_remove(timeoutId); + } + }, + null); + } + } catch (e) { + log('Error starting gsd-xsettings: %s'.format(e.message)); + } + return true; }); global.display.connect('x11-display-closing', () => { if (!Meta.is_wayland_compositor()) return; - Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail'); + try { + Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail'); + } catch (e) { + log('Error stopping gsd-xsettings: %s'.format(e.message)); + } IBusManager.getIBusManager().restartDaemon(); });