From 5d3718123afed16691843b5d7bcd5841b18f95ac Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Tue, 13 Sep 2016 09:37:08 +0200 Subject: stm: feedback forwarding has to be atomic I think that a better place for the mutex would be the printing routine, but I still hope we will get rid of threads in favor of coroutines. So I keep all mutexes in Stm. --- stm/stm.ml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/stm/stm.ml b/stm/stm.ml index cf9fa5492..c53bd958a 100644 --- a/stm/stm.ml +++ b/stm/stm.ml @@ -37,10 +37,12 @@ let state_computed, state_computed_hook = Hook.make let state_ready, state_ready_hook = Hook.make ~default:(fun state_id -> ()) () -let forward_feedback, forward_feedback_hook = Hook.make - ~default:(function +let forward_feedback, forward_feedback_hook = + let m = Mutex.create () in + Hook.make ~default:(function | { id = id; route; contents } -> - feedback ~id:id ~route contents) () + try Mutex.lock m; feedback ~id:id ~route contents; Mutex.unlock m + with e -> Mutex.unlock m; raise e) () let parse_error, parse_error_hook = Hook.make ~default:(fun id loc msg -> -- cgit v1.2.3