diff options
| author | Enrico Tassi | 2014-02-10 18:00:51 +0100 |
|---|---|---|
| committer | Enrico Tassi | 2014-02-10 18:04:10 +0100 |
| commit | d8202af0887825d236c3e11704f266d8282c8aa7 (patch) | |
| tree | 98e6f500d276d35448731818412d37c052a2bf16 | |
| parent | 98041625b841bad9bdc37329279cf84c2e9701b3 (diff) | |
Timeout and Set Default Timeout fixed (closes: #3229)
| -rw-r--r-- | toplevel/vernacentries.ml | 16 |
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 |
