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)))))))