guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[shepherd] 06/13: service: 'read-pid-file' no longer blocks.


From: Ludovic Courtès
Subject: [shepherd] 06/13: service: 'read-pid-file' no longer blocks.
Date: Fri, 25 Mar 2022 17:59:00 -0400 (EDT)

civodul pushed a commit to branch wip-fibers
in repository shepherd.

commit 95eb7a4db16122eb9776f598c17a215d13264b7b
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Mon Mar 21 12:11:40 2022 +0100

    service: 'read-pid-file' no longer blocks.
    
    * modules/shepherd/service.scm: Use (fibers).
    (read-pid-file): Remove XXX comment.
    (start): Remove 'call-with-blocked-asyncs', which is a continuation barrier.
---
 modules/shepherd/service.scm | 28 +++++++++++-----------------
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 600cc95..13f1a77 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -1,5 +1,5 @@
 ;; service.scm -- Representation of services.
-;; Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic 
Courtès <ludo@gnu.org>
+;; Copyright (C) 2013-2022 Ludovic Courtès <ludo@gnu.org>
 ;; Copyright (C) 2002, 2003 Wolfgang Järling <wolfgang@pro-linux.de>
 ;; Copyright (C) 2014 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
 ;; Copyright (C) 2016 Alex Kost <alezost@gmail.com>
@@ -24,6 +24,7 @@
 ;; along with the GNU Shepherd.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (shepherd service)
+  #:use-module (fibers)
   #:use-module (oop goops)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
@@ -338,19 +339,14 @@ wire."
               (local-output (l10n "Service ~a depends on ~a.")
                             (canonical-name obj)
                             problem)
-               (call-with-blocked-asyncs
-                (lambda ()
-                  ;; Start the service itself.  Asyncs are blocked so that if
-                  ;; the newly-started process dies immediately, the SIGCHLD
-                  ;; handler is invoked later, once we have set the 'running'
-                  ;; field.
-                  (slot-set! obj 'running (catch #t
-                                            (lambda ()
-                                              (apply (slot-ref obj 'start)
-                                                     args))
-                                            (lambda (key . args)
-                                              (report-exception 'start obj
-                                                                key args)))))))
+               ;; Start the service itself.
+               (slot-set! obj 'running (catch #t
+                                         (lambda ()
+                                           (apply (slot-ref obj 'start)
+                                                  args))
+                                         (lambda (key . args)
+                                           (report-exception 'start obj
+                                                             key args)))))
 
           ;; Status message.
            (let ((running (slot-ref obj 'running)))
@@ -745,9 +741,7 @@ daemon writing FILE is running in a separate PID namespace."
       (and (< (current-time) (+ start max-delay))
            (begin
              ;; FILE does not exist yet, so wait and try again.
-             ;; XXX: Ideally we would yield to the main event loop
-             ;; and/or use inotify.
-             (sleep 1)
+             (sleep 1)                          ;yield to the Fibers scheduler
              (loop))))
 
     (catch 'system-error



reply via email to

[Prev in Thread] Current Thread [Next in Thread]