all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Lucas Werkmeister <mail@lucaswerkmeister.de>
To: 31498@debbugs.gnu.org
Cc: Lucas Werkmeister <mail@lucaswerkmeister.de>
Subject: bug#31498: [PATCH] Notify systemd in daemon-initialized and kill-emacs
Date: Sat,  9 Jun 2018 15:01:08 +0200	[thread overview]
Message-ID: <20180609130108.20598-1-mail@lucaswerkmeister.de> (raw)
In-Reply-To: <20180518174031.12514-1-mail@lucaswerkmeister.de>

With --[bg-]daemon and Type=forking, systemd will only consider the
daemon to have fully started up once the original process exits, and
will wait until then to start units depending on the Emacs service.  To
get the same functionality with --fg-daemon, use Type=notify instead of
Type=simple and explicitly send a readiness notification to systemd at
the point where the forked process would in --bg-daemon mode notify its
parent process and cause it to exit.  Similarly, notify systemd at the
beginning of the shutdown process as well.  (Both of these calls are
successful no-ops if emacs was not started by systemd.)
* etc/emacs.service: Update Type.
* src/emacs.c (daemon-initialized) [HAVE_LIBSYSTEMD]:
* src/emacs.c (kill-emacs) [HAVE_LIBSYSTEMD]: Call sd_notify().
---
 etc/NEWS          |  8 ++++++++
 etc/emacs.service |  2 +-
 src/emacs.c       | 11 +++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/etc/NEWS b/etc/NEWS
index 4ea3440754..ba693e7e52 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -74,6 +74,14 @@ work right without some adjustment:
 - you can use the new 'package-quickstart' so activation of packages does not
   need to pay attention to 'package-load-list' or 'package-user-dir' any more.
 
+---
+** Emacs now notifies systemd when startup finishes or shutdown begins.
+Units that are ordered after 'emacs.service' will only be started
+after Emacs has finished initialization and is ready for use.
+(If your Emacs is installed in a non-standard location and you copied the
+emacs.service file to eg ~/.config/systemd/user/, you will need to copy
+the new version of the file again.)
+
 \f
 * Changes in Emacs 27.1
 
diff --git a/etc/emacs.service b/etc/emacs.service
index b29177b120..dbcb6bc301 100644
--- a/etc/emacs.service
+++ b/etc/emacs.service
@@ -7,7 +7,7 @@ Description=Emacs text editor
 Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
 
 [Service]
-Type=simple
+Type=notify
 ExecStart=emacs --fg-daemon
 ExecStop=emacsclient --eval "(kill-emacs)"
 Environment=SSH_AUTH_SOCK=%t/keyring/ssh
diff --git a/src/emacs.c b/src/emacs.c
index 8633e934e5..cde20fc096 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -2017,6 +2017,10 @@ all of which are called before Emacs is actually killed.  */
 {
   int exit_code;
 
+#ifdef HAVE_LIBSYSTEMD
+  sd_notify(0, "STOPPING=1");
+#endif /* HAVE_LIBSYSTEMD */
+
   /* Fsignal calls emacs_abort () if it sees that waiting_for_input is
      set.  */
   waiting_for_input = 0;
@@ -2477,6 +2481,13 @@ from the parent process and its tty file descriptors.  */)
     error ("This function can only be called after loading the init files");
 #ifndef WINDOWSNT
 
+  if (daemon_type == 1)
+    {
+#ifdef HAVE_LIBSYSTEMD
+      sd_notify(0, "READY=1");
+#endif /* HAVE_LIBSYSTEMD */
+    }
+
   if (daemon_type == 2)
     {
       int nfd;
-- 
2.17.1






  parent reply	other threads:[~2018-06-09 13:01 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-18 17:40 bug#31498: [PATCH] Notify systemd in daemon-initialized Lucas Werkmeister
2018-06-07 13:08 ` Noam Postavsky
2018-06-07 15:38   ` Eli Zaretskii
2018-06-07 21:40   ` Lucas Werkmeister
2018-06-08  0:41     ` Noam Postavsky
2018-06-09 10:27 ` bug#31498: [PATCH] Notify systemd in daemon-initialized and kill-emacs Lucas Werkmeister
2018-06-09 10:55 ` bug#31498: (no subject) Lucas Werkmeister
2018-06-09 10:56 ` bug#31498: [PATCH] Notify systemd in daemon-initialized and kill-emacs Lucas Werkmeister
2018-06-09 12:29   ` Noam Postavsky
2018-06-09 12:31     ` Lucas Werkmeister
2018-06-09 12:36     ` Noam Postavsky
2018-06-09 13:00       ` Lucas Werkmeister
2018-06-09 14:05         ` Noam Postavsky
2018-06-13 13:42           ` Lucas Werkmeister
2018-06-13 16:33             ` Eli Zaretskii
2018-06-09 13:01 ` Lucas Werkmeister [this message]
2018-07-12 22:20 ` bug#31498: [PATCH] Notify systemd in daemon-initialized and, kill-emacs Lucas Werkmeister
2018-07-13  6:58   ` Eli Zaretskii
2018-07-25 12:03 ` bug#31498: [PATCH] Notify systemd in daemon-initialized and, , kill-emacs Lucas Werkmeister
2018-07-25 14:48   ` Eli Zaretskii
2018-07-26  1:13     ` Noam Postavsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180609130108.20598-1-mail@lucaswerkmeister.de \
    --to=mail@lucaswerkmeister.de \
    --cc=31498@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.