aboutsummaryrefslogtreecommitdiff
path: root/lib/backtrace.ml
diff options
context:
space:
mode:
authorPierre Corbineau2014-12-16 15:59:52 +0100
committerPierre Corbineau2014-12-16 16:01:25 +0100
commit8029f7555f9c6f201cc70b5ecc538b11a861f0aa (patch)
treec750b3ea7cafd5ec2176866bbd16208e5335978a /lib/backtrace.ml
parentd4f5bdd6f7304fac541bb5f4555ecdd6aa42699a (diff)
parentf88cce2698da000ab9054da31330db70997a41a4 (diff)
fix bug #2447 in congruence
Diffstat (limited to 'lib/backtrace.ml')
-rw-r--r--lib/backtrace.ml13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/backtrace.ml b/lib/backtrace.ml
index 19b07d8767..b3b8bdea2e 100644
--- a/lib/backtrace.ml
+++ b/lib/backtrace.ml
@@ -84,18 +84,23 @@ let get_backtrace e =
let add_backtrace e =
if !is_recording then
+ (** This must be the first function call, otherwise the stack may be
+ destroyed *)
let current = get_exception_backtrace () in
+ let info = Exninfo.info e in
begin match current with
- | None -> e
+ | None -> (e, info)
| Some fragment ->
- let bt = match get_backtrace e with
+ let bt = match get_backtrace info with
| None -> []
| Some bt -> bt
in
let bt = fragment :: bt in
- Exninfo.add e backtrace bt
+ (e, Exninfo.add info backtrace bt)
end
- else e
+ else
+ let info = Exninfo.info e in
+ (e, info)
let app_backtrace ~src ~dst =
if !is_recording then