[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#41507: [PATCH Shepherd 2/2] shepherd: Use 'signalfd' when possible.
From: |
Ludovic Courtès |
Subject: |
bug#41507: [PATCH Shepherd 2/2] shepherd: Use 'signalfd' when possible. |
Date: |
Wed, 27 May 2020 00:13:53 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Hi!
Mathieu Othacehe <address@hidden> skribis:
>> + (lambda args
>> + (if (= ENOSYS (system-error-errno args))
>> + #f
>> + (apply throw args)))))
>
> Maybe:
>
> (and (= ENOSYS (system-error-errno args))
> (apply throw args))
It’s not equivalent. :-)
>> +(define (handle-signal-port port)
>> + "Read from PORT, a signalfd port, and handle the signal accordingly."
>> + (let ((signal (consume-signalfd-siginfo port)))
>> + (cond ((= signal SIGCHLD)
>> + (handle-SIGCHLD))
>> + ((= signal SIGINT)
>> + (catch 'quit
>> + (lambda ()
>> + (stop root-service))
>> + quit-exception-handler))
>
> Maybe we should create a handle-SIGINT, to make sure that the same code
> is shared with the sigaction handler?
Good idea, done!
>> + (begin
>> + ;; Unblock any signals that might have been blocked by the parent
>> + ;; process.
>> + (unblock-signals (list SIGCHLD SIGINT SIGHUP SIGTERM))
>
> This made me realize that we may want to disable/reset SIGINT and
> SIGHUP, in the same way that we do for SIGTERM? This is not related to
> your patch anyway.
Right, I’ll let you look into it if that’s fine with you.
> You could also extend the comment to say that it is only necessary if
> using the signalfd mechanism (because signals are not blocked
> otherwise).
Done.
I did:
make dist
guix build shepherd --with-source=shepherd-0.8.0.tar.gz \
-s x86_64-linux -s i686-linux -s armhf-linux -s aarch64-linux
guix build shepherd --with-source=shepherd-0.8.0.tar.gz \
--target=i586-pc-gnu
and it all passes.
Janneke, could you check that it works on GNU/Hurd?
Ludo’.
[bug#41507] [PATCH Shepherd 0/2] Use 'signalfd' on GNU/Linux, Jelle Licht, 2020/05/24