From 79b77b4377db2e79a1f3396cfeeca64bfab00341 Mon Sep 17 00:00:00 2001
From: Mathieu Othacehe <othacehe@gnu.org>
Date: Mon, 1 Feb 2021 18:16:23 +0100
Subject: [PATCH] remote: Start workers only once.

* src/cuirass/remote-worker.scm (%workers-started?): New variable.
(remote-worker): Use it to start workers only once.
---
 src/cuirass/remote-worker.scm | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/cuirass/remote-worker.scm b/src/cuirass/remote-worker.scm
index 97a9d7fa..f78560f0 100644
--- a/src/cuirass/remote-worker.scm
+++ b/src/cuirass/remote-worker.scm
@@ -286,6 +286,8 @@ and executing them.  The worker can reply on the same socket."
 (define %worker-pids
   (make-atomic-box '()))
 
+(define %workers-started? #f)
+
 (define (load-server file)
   (let ((user-module (make-user-module '((cuirass remote)))))
     (load* file user-module)))
@@ -368,20 +370,22 @@ exiting."
            (lambda (action service)
              (case action
                ((new-service)
-                (for-each
-                 (lambda (n)
-                   (let* ((address (or address
-                                       (avahi-service-local-address service)))
-                          (publish-url (local-publish-url address)))
-                     (add-to-worker-pids!
-                      (start-worker (worker
-                                     (name (generate-worker-name))
-                                     (address address)
-                                     (machine (gethostname))
-                                     (publish-url publish-url)
-                                     (systems systems))
-                                    (avahi-service->server service)))))
-                 (iota workers)))))
+                (unless %workers-started?
+                  (for-each
+                   (lambda (n)
+                     (let* ((address (or address
+                                         (avahi-service-local-address service)))
+                            (publish-url (local-publish-url address)))
+                       (add-to-worker-pids!
+                        (start-worker (worker
+                                       (name (generate-worker-name))
+                                       (address address)
+                                       (machine (gethostname))
+                                       (publish-url publish-url)
+                                       (systems systems))
+                                      (avahi-service->server service)))))
+                   (iota workers))
+                  (set! %workers-started? #t)))))
            #:ignore-local? #f
            #:types (list remote-server-service-type)
            #:stop-loop? (lambda ()
-- 
GitLab