civodul pushed a commit to branch wip-syslogd
in repository shepherd.

commit f691129fdb746084294a7fd9e29e147c104418da
Author: Ludovic Courtès <[email protected]>
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 5a35160..88bbb98 100644
--- a/modules/shepherd/comm.scm
+++ b/modules/shepherd/comm.scm
@@ -279,7 +279,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 c0f7a11..ecec8d1 100644
--- a/modules/shepherd/logger.scm
+++ b/modules/shepherd/logger.scm
@@ -346,8 +346,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