aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnrico Tassi2014-02-10 18:00:51 +0100
committerEnrico Tassi2014-02-10 18:04:10 +0100
commitd8202af0887825d236c3e11704f266d8282c8aa7 (patch)
tree98e6f500d276d35448731818412d37c052a2bf16
parent98041625b841bad9bdc37329279cf84c2e9701b3 (diff)
Timeout and Set Default Timeout fixed (closes: #3229)
-rw-r--r--toplevel/vernacentries.ml16
1 files changed, 12 insertions, 4 deletions
diff --git a/toplevel/vernacentries.ml b/toplevel/vernacentries.ml
index ae6ca4d388..51fbbc47bb 100644
--- a/toplevel/vernacentries.ml
+++ b/toplevel/vernacentries.ml
@@ -1818,9 +1818,10 @@ let set_timeout n =
Some psh
let default_set_timeout () =
- match !current_timeout with
- | Some n -> set_timeout n
- | None -> None
+ match !current_timeout, !default_timeout with
+ | Some n, _ -> set_timeout n
+ | None, Some n -> set_timeout n
+ | None, None -> None
let restore_timeout = function
| None -> ()
@@ -1828,7 +1829,8 @@ let restore_timeout = function
(* stop alarm *)
ignore(Unix.alarm 0);
(* restore handler *)
- Sys.set_signal Sys.sigalrm psh
+ Sys.set_signal Sys.sigalrm psh;
+ current_timeout := None
let locate_if_not_already loc exn =
match Loc.get_loc exn with
@@ -1902,6 +1904,12 @@ let interp ?(verbosely=true) ?proof (loc,c) =
restore_timeout psh;
Flags.program_mode := orig_program_mode;
raise e
+ | Timeout as reraise ->
+ let e = Errors.push reraise in
+ let e = locate_if_not_already loc e in
+ restore_timeout psh;
+ Flags.program_mode := orig_program_mode;
+ raise e
in
if verbosely then Flags.verbosely (aux false) c
else aux false c