Hi! Mathieu Othacehe 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’.