[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[shepherd] 29/32: shepherd: Gracefully handle failure to open the socket
From: |
Ludovic Courtès |
Subject: |
[shepherd] 29/32: shepherd: Gracefully handle failure to open the socket. |
Date: |
Wed, 30 Mar 2022 11:01:33 -0400 (EDT) |
civodul pushed a commit to branch master
in repository shepherd.
commit e9616abaad176ffa32e6104a1ab90805528af534
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Mon Mar 28 23:10:03 2022 +0200
shepherd: Gracefully handle failure to open the socket.
Previously 'shepherd' would just show a backtrace and hang because other
fibers would still be running.
* modules/shepherd.scm (call-with-server-socket): Catch 'system-error'
around 'open-server-socket' call.
---
modules/shepherd.scm | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/modules/shepherd.scm b/modules/shepherd.scm
index 63a0a2c..80ce642 100644
--- a/modules/shepherd.scm
+++ b/modules/shepherd.scm
@@ -72,7 +72,18 @@ delimited continuations and fibers."
(define (call-with-server-socket file-name proc)
"Call PROC, passing it a listening socket at FILE-NAME and deleting the
socket file at FILE-NAME upon exit of PROC. Return the values of PROC."
- (let ((sock (open-server-socket file-name)))
+ (let ((sock (catch 'system-error
+ (lambda ()
+ (open-server-socket file-name))
+ (lambda args
+ (match args
+ ((key proc . _)
+ (report-error (l10n "while opening socket '~a': ~a: ~a~%")
+ file-name proc
+ (strerror (system-error-errno args)))
+ ;; Stop services that were started from the config file
+ ;; and quit.
+ (stop 'root)))))))
(unwind-protect (proc sock)
(begin
(close sock)
- [shepherd] 10/32: shepherd: Use one fiber for signal handling, and one for clients., (continued)
- [shepherd] 10/32: shepherd: Use one fiber for signal handling, and one for clients., Ludovic Courtès, 2022/03/30
- [shepherd] 15/32: doc: Fix inetutils cross-reference., Ludovic Courtès, 2022/03/30
- [shepherd] 12/32: service: 'read-pid-file' uses (@ (guile) sleep) when it's not suspendable., Ludovic Courtès, 2022/03/30
- [shepherd] 18/32: service: Add the #:transient? slot., Ludovic Courtès, 2022/03/30
- [shepherd] 17/32: service: Remove unused 'make-init.d-service'., Ludovic Courtès, 2022/03/30
- [shepherd] 24/32: shepherd: "shepherd -s -" replies to the current output port., Ludovic Courtès, 2022/03/30
- [shepherd] 26/32: service: Add #:max-connections to 'make-inetd-constructor'., Ludovic Courtès, 2022/03/30
- [shepherd] 16/32: support: 'l10n' accepts plural forms., Ludovic Courtès, 2022/03/30
- [shepherd] 23/32: shepherd: Remove half-baked readline support., Ludovic Courtès, 2022/03/30
- [shepherd] 30/32: Avoid Guile run-time warning about overridden 'sleep' binding., Ludovic Courtès, 2022/03/30
- [shepherd] 29/32: shepherd: Gracefully handle failure to open the socket.,
Ludovic Courtès <=
- [shepherd] 05/32: shepherd: Factorize out the main loop., Ludovic Courtès, 2022/03/30
- [shepherd] 19/32: service: Add inetd constructor and destructor., Ludovic Courtès, 2022/03/30
- [shepherd] 20/32: service: Allow 'running' value to be a thunk., Ludovic Courtès, 2022/03/30
- [shepherd] 27/32: service: 'make-inetd-constructor' lets the caller specify socket ownership., Ludovic Courtès, 2022/03/30
- [shepherd] 32/32: build: Bump to version 0.9.0rc1., Ludovic Courtès, 2022/03/30