From 06c82a363221fb14261fac87215b21d00ec0b1a1 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Wed, 4 Sep 2019 17:15:27 +0200
Subject: [PATCH] [Server] catch Sys.Break at server main loop

---
 src/plugins/server/main.ml | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/plugins/server/main.ml b/src/plugins/server/main.ml
index 86545e30e34..640e7b7c64c 100644
--- a/src/plugins/server/main.ml
+++ b/src/plugins/server/main.ml
@@ -287,18 +287,24 @@ let run ~pretty ?(equal=(=)) ~fetch () =
       shutdown = false ;
     } in
     try
+      (* TODO: remove the following line once the Why3 signal handler is not
+         used anymore. *)
+      Sys.catch_break true;
       signal true ;
       Senv.feedback "Server running." ;
-      while not server.shutdown do
-        let activity = process server in
-        if not activity then Unix.sleepf idle_s ;
-      done ;
+      begin try
+          while not server.shutdown do
+            let activity = process server in
+            if not activity then Unix.sleepf idle_s ;
+          done ;
+        with Sys.Break -> () (* Ctr+C, just leave the loop normally *)
+      end;
       Senv.feedback "Server shutdown." ;
       signal false ;
-    with err ->
+    with exn ->
       Senv.feedback "Server interruped (fatal error)." ;
       signal false ;
-      raise err
+      raise exn
   end
 
 (* -------------------------------------------------------------------------- *)
-- 
GitLab