From 9f77db78e6b48cc0e9aa30ef2a223c309703a18e Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 13 Feb 2025 11:16:12 +0100 Subject: services: transmission: Remove custom ‘stop’ implementation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ‘stop’ methods had two problems: 1. It is incompatible with the Shepherd 1.0, where the running value is a 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 --- gnu/services/file-sharing.scm | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-) (limited to 'gnu') 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 @@ (define (transmission-daemon-shepherd-service config) #: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 -- cgit v1.2.3