aboutsummaryrefslogtreecommitdiff
path: root/stm/asyncTaskQueue.ml
diff options
context:
space:
mode:
authorMaxime Dénès2019-04-01 17:41:22 +0200
committerMaxime Dénès2019-04-03 12:01:25 +0200
commitf374b79e08e135de11def93005110a833686c5f7 (patch)
tree5b48870361b12c53f254381cbf809e2697e5e5ef /stm/asyncTaskQueue.ml
parentb45d4425b760b4e6346df4ea19f24d5c1e84b911 (diff)
Protect some I/O routines from SIGALRM
This is necessary to prevent Coq from sending ill-formed output in some scenarios involving `Timeout`. Co-authored-by: Enrico Tassi <Enrico.Tassi@inria.fr>
Diffstat (limited to 'stm/asyncTaskQueue.ml')
-rw-r--r--stm/asyncTaskQueue.ml6
1 files changed, 4 insertions, 2 deletions
diff --git a/stm/asyncTaskQueue.ml b/stm/asyncTaskQueue.ml
index 73b9ef7da0..d1bd3692ab 100644
--- a/stm/asyncTaskQueue.ml
+++ b/stm/asyncTaskQueue.ml
@@ -329,10 +329,12 @@ module Make(T : Task) () = struct
let main_loop () =
(* We pass feedback to master *)
let slave_feeder oc fb =
- Marshal.to_channel oc (RespFeedback (debug_with_pid fb)) []; flush oc in
+ Control.protect_sigalrm (fun () ->
+ Marshal.to_channel oc (RespFeedback (debug_with_pid fb)) []; flush oc) ()
+ in
ignore (Feedback.add_feeder (fun x -> slave_feeder (Option.get !slave_oc) x));
(* We ask master to allocate universe identifiers *)
- UnivGen.set_remote_new_univ_id (bufferize (fun () ->
+ UnivGen.set_remote_new_univ_id (bufferize @@ Control.protect_sigalrm (fun () ->
marshal_response (Option.get !slave_oc) RespGetCounterNewUnivLevel;
match unmarshal_more_data (Option.get !slave_ic) with
| MoreDataUnivLevel l -> l));