summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <[email protected]>2025-02-13 11:16:12 +0100
committerLudovic Courtès <[email protected]>2025-02-21 15:27:12 +0100
commit9f77db78e6b48cc0e9aa30ef2a223c309703a18e (patch)
tree340915304eaaf36bf1d114269cb4ce13a7ce7321 /gnu
parentabc45761abe9c3b367bca95c4dd52c1f589aee5f (diff)
services: transmission: Remove custom ‘stop’ implementation.
This ‘stop’ methods had two problems: 1. It is incompatible with the Shepherd 1.0, where the running value is a <process> record and not a PID. 2. It is unreliable because its ‘waitpid’ calls compete with those made by shepherd’s main event loop upon SIGCHLD. * gnu/services/file-sharing.scm (transmission-daemon-shepherd-service): Change ‘stop’ to use ‘make-kill-destructor’. Change-Id: I406eb619d4a72bb5afe6200ac5c8f68736a78d97
Diffstat (limited to 'gnu')
-rw-r--r--gnu/services/file-sharing.scm33
1 files changed, 6 insertions, 27 deletions
diff --git a/gnu/services/file-sharing.scm b/gnu/services/file-sharing.scm
index 6b25cd420f..4b6867bc07 100644
--- a/gnu/services/file-sharing.scm
+++ b/gnu/services/file-sharing.scm
@@ -648,33 +648,12 @@ satisfy requests from peers."))
#:log-file #$%transmission-daemon-log-file
#:environment-variables
'("CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt")))
- (stop #~(lambda (pid)
- (kill pid SIGTERM)
-
- ;; Transmission Daemon normally needs some time to shut down,
- ;; as it will complete some housekeeping and send a final
- ;; update to trackers before it exits.
- ;;
- ;; Wait a reasonable period for it to stop before continuing.
- ;; If we don't do this, restarting the service can fail as the
- ;; new daemon process finds the old one still running and
- ;; attached to the port used for peer connections.
- (let wait-before-killing ((period #$stop-wait-period))
- (if (zero? (car (waitpid pid WNOHANG)))
- (if (positive? period)
- (begin
- (sleep 1)
- (wait-before-killing (- period 1)))
- (begin
- (format #t
- #$(G_ "Wait period expired; killing \
-transmission-daemon (pid ~a).~%")
- pid)
- (display #$(G_ "(If you see this message \
-regularly, you may need to increase the value
-of 'stop-wait-period' in the service configuration.)\n"))
- (kill pid SIGKILL)))))
- #f))
+
+ ;; Transmission Daemon normally needs some time to shut down, as it will
+ ;; complete some housekeeping and send a final update to trackers before
+ ;; it exits.
+ (stop #~(make-kill-destructor #:grace-period #$stop-wait-period))
+
(actions
(list
(shepherd-action