[gnome-shell/benzea/sd-notify] Notify service startup to systemd



commit ec353eb908808e97351f0ff343ade49a30b38f7f
Author: Benjamin Berg <bberg redhat com>
Date:   Sun Aug 25 07:26:12 2019 +0200

    Notify service startup to systemd
    
    Using the bus name to notify service startup to systemd has some
    disadvantages. The main one being that systemd will consider a
    gnome-shell restart (Alt+F2 r) a service failure and restart the shell
    and clean up all its children (i.e. user launched applications). In the
    future the shell should launch applications in their own transient unit.
    
    Another potential issue is that we must never load
    gnome-shell-wayland.service and gnome-shell-x11.service at the same
    time, as systemd does not want to services providing the same bus name.
    
    Fixes #1496
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1496

 data/gnome-shell-wayland.service.in | 3 +--
 data/gnome-shell-x11.service.in     | 3 +--
 src/main.c                          | 9 +++++++++
 3 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/data/gnome-shell-wayland.service.in b/data/gnome-shell-wayland.service.in
index 848a3ea329..351571c7fc 100644
--- a/data/gnome-shell-wayland.service.in
+++ b/data/gnome-shell-wayland.service.in
@@ -17,10 +17,9 @@ Before=gnome-session-initialized.target
 #Conflicts=gnome-shell-x11.service
 
 [Service]
-Type=dbus
+Type=notify
 ExecStart=@bindir@/gnome-shell
 # Exit code 1 means we are probably *not* dealing with an extension failure
 SuccessExitStatus=1
 # On wayland we cannot restart
 Restart=no
-BusName=org.gnome.Shell
diff --git a/data/gnome-shell-x11.service.in b/data/gnome-shell-x11.service.in
index 142f26b241..2c9fec1b5a 100644
--- a/data/gnome-shell-x11.service.in
+++ b/data/gnome-shell-x11.service.in
@@ -21,7 +21,7 @@ StartLimitIntervalSec=15s
 StartLimitBurst=3
 
 [Service]
-Type=dbus
+Type=notify
 ExecStart=@bindir@/gnome-shell
 # Exit code 1 means we are probably *not* dealing with an extension failure
 SuccessExitStatus=1
@@ -29,4 +29,3 @@ SuccessExitStatus=1
 Restart=always
 # Do not wait before restarting the shell
 RestartSec=0ms
-BusName=org.gnome.Shell
diff --git a/src/main.c b/src/main.c
index 6faf9934fb..8be1395f70 100644
--- a/src/main.c
+++ b/src/main.c
@@ -24,6 +24,14 @@
 #include "shell-perf-log.h"
 #include "st.h"
 
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#else
+/* So we don't need to add ifdef's everywhere */
+#define sd_notify(u, m)            do {} while (0)
+#define sd_notifyf(u, m, ...)      do {} while (0)
+#endif
+
 extern GType gnome_shell_plugin_get_type (void);
 
 #define SHELL_DBUS_SERVICE "org.gnome.Shell"
@@ -524,6 +532,7 @@ main (int argc, char **argv)
   shell_init_debug (g_getenv ("SHELL_DEBUG"));
 
   shell_dbus_init (meta_get_replace_current_wm ());
+  sd_notify (0, "READY=1");
   shell_a11y_init ();
   shell_perf_log_init ();
   shell_introspection_init ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]