civodul pushed a commit to branch devel
in repository shepherd.

commit 4f379463f7c995e24e86883fe84e89871eb1f2fd
Author: Ludovic Courtès <l...@gnu.org>
AuthorDate: Wed Jul 17 23:23:20 2024 +0200

    logger: Make syslog output non-blocking.
    
    * modules/shepherd/comm.scm (call-with-syslog-port): Pass SOCK_NONBLOCK
    for the syslog socket.
    * modules/shepherd/logger.scm (service-system-logger): Use ‘put-string’
    rather than ‘simple-format’ for actual output.
---
 modules/shepherd/comm.scm   | 2 +-
 modules/shepherd/logger.scm | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/modules/shepherd/comm.scm b/modules/shepherd/comm.scm
index 2320e30..ef04074 100644
--- a/modules/shepherd/comm.scm
+++ b/modules/shepherd/comm.scm
@@ -280,7 +280,7 @@ mechanism."
 
       (or (and port (not (port-closed? port)) (call/syslog))
           (let ((sock (socket AF_UNIX
-                              (logior SOCK_CLOEXEC SOCK_DGRAM)
+                              (logior SOCK_CLOEXEC SOCK_NONBLOCK SOCK_DGRAM)
                               0)))
             (catch 'system-error
               (lambda ()
diff --git a/modules/shepherd/logger.scm b/modules/shepherd/logger.scm
index 68abf5d..5bb6279 100644
--- a/modules/shepherd/logger.scm
+++ b/modules/shepherd/logger.scm
@@ -344,8 +344,10 @@ it's logging for @var{service}."
          (let ((now (current-time)))
            (call-with-syslog-port
             (lambda (port)
-              (simple-format port "shepherd[~a]: ~a~%"
-                             (getpid) line)))
+              ;; Note: 'simple-format' is not suspendable, hence 'put-string'.
+              (let ((str (simple-format #f "shepherd[~a]: ~a~%"
+                                        (getpid) line)))
+                (put-string port str))))
            (loop (ring-buffer-insert (cons now line) messages)
                  service)))))))
 

Reply via email to