From e86dd911dd2f095280b522540b3586bf878bc1d5 Mon Sep 17 00:00:00 2001
From: Michele Alberti <michele.alberti@cea.fr>
Date: Thu, 6 May 2021 17:44:38 +0200
Subject: [PATCH] Remove temporary files only when computation correctly
 terminates.

---
 config.ml |  2 +-
 engine.ml | 12 +++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/config.ml b/config.ml
index 16631e3c..9690f5b4 100644
--- a/config.ml
+++ b/config.ml
@@ -167,13 +167,13 @@ let detect_default_solvers () =
                   Stdlib.close_in in_channel;
                   Buffer.contents buf
               in
-              Utils.remove_on_app_mode tmp;
               if retcode <> 0
               then begin
                 Logs.info (fun m -> m "No solver `%s' found." S.name);
                 None
               end
               else begin
+                Utils.remove_on_app_mode tmp;
                 (* If available, we save a [config] for solver. *)
                 let version = version_of_solver solver cmd_output in
                 let config = { name = S.name; exe; version; } in
diff --git a/engine.ml b/engine.ml
index b95cab01..a599d648 100644
--- a/engine.ml
+++ b/engine.ml
@@ -45,10 +45,11 @@ let check_availability solver config =
     let retcode = Sys.command cmd in
     let in_channel = Stdlib.open_in tmp in
     Stdlib.close_in in_channel;
-    Utils.remove_on_app_mode tmp;
     if retcode = 0
-    then
+    then begin
+      Utils.remove_on_app_mode tmp;
       Ok ()
+    end
     else
       Error
         (Format.sprintf
@@ -199,7 +200,6 @@ let exec_tasks ~raw_options solver config model tasks_htbl =
                 Logs.info (fun m -> m "Executing command `%s'." cmd);
                 try
                   let retcode = Sys.command cmd in
-                  Utils.remove_on_app_mode prop;
                   if retcode <> 0
                   then Error (Format.sprintf "Command `%s' has failed." cmd)
                   else begin
@@ -207,14 +207,16 @@ let exec_tasks ~raw_options solver config model tasks_htbl =
                     let result = extract_result solver ~log ~output in
                     Logs.app (fun m -> m "Result of `%s': %a."
                                  task.id Solver.Result.pretty result);
-                    Utils.remove_on_app_mode output;
                     if Solver.Result.equal result Solver.Result.Failure
                     then
                       Logs.app (fun m ->
                           m "See error messages in `%s' for more information."
                             log)
-                    else
+                    else begin
                       Utils.remove_on_app_mode log;
+                      Utils.remove_on_app_mode prop;
+                      Utils.remove_on_app_mode output;
+                    end;
                     Ok result
                   end
                 with _ ->
-- 
GitLab