From 44f0e1f1823ac9ce746f007e3cdb26980bf6d68e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Wed, 30 Mar 2022 14:54:59 +0200
Subject: [PATCH] [server] signaling cmdline once ; replies order

---
 src/plugins/server/main.ml | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/plugins/server/main.ml b/src/plugins/server/main.ml
index f5ed3f030f8..006d4b9d152 100644
--- a/src/plugins/server/main.ml
+++ b/src/plugins/server/main.ml
@@ -108,6 +108,7 @@ type 'a server = {
   mutable s_signal : Signals.t ; (* emitted signals since last synchro *)
   mutable shutdown : bool ; (* server has been asked to shut down *)
   mutable running : 'a running ; (* server running state *)
+  mutable cmdline : bool option ; (* cmdline signal management *)
 }
 
 exception Killed
@@ -296,7 +297,13 @@ let communicate server =
       with exn -> Some exn in (* re-raised after message reply *)
     let pool = ref [] in
     Queue.iter (fun r -> pool := r :: !pool) server.q_out ;
+    Option.iter
+      (fun cmd ->
+         pool := (if cmd then `CmdLineOn else `CmdLineOff) :: !pool ;
+      ) server.cmdline ;
+    pool := List.rev !pool ;
     Queue.clear server.q_out ;
+    server.cmdline <- None ;
     server.s_signal <- Signals.empty ;
     Senv.debug ~level:2 "response(s) callback" ;
     if Senv.debug_atleast 2 then
@@ -366,6 +373,7 @@ let create ~pretty ?(equal=(=)) ~fetch () =
     s_signal = Signals.empty ;
     daemon = None ;
     running = Idle ;
+    cmdline = None ;
     shutdown = false ;
   }
 
@@ -379,7 +387,7 @@ let start server =
     Senv.debug ~level:2 "Server started (was %a)"
       (pp_running server.pretty) server.running ;
     server.running <- CmdLine ;
-    Queue.push `CmdLineOn server.q_out ;
+    server.cmdline <- Some true ;
     emitter := do_signal server ;
     match server.daemon with
     | Some _ -> ()
@@ -411,6 +419,7 @@ let stop server =
         Senv.feedback "Server disabled." ;
         server.daemon <- None ;
         server.running <- Idle ;
+        server.cmdline <- None ;
         Db.off_progress daemon ;
         set_active false ;
       end
@@ -422,7 +431,7 @@ let foreground server =
     Senv.debug ~level:2 "Server foreground (was %a)"
       (pp_running server.pretty) server.running ;
     server.running <- Idle ;
-    Queue.push `CmdLineOff server.q_out ;
+    server.cmdline <- Some false ;
     emitter := do_signal server ;
     match server.daemon with
     | None -> ()
-- 
GitLab