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