From d63237bd38059b8468ec4e147cca49b1cf8caac4 Mon Sep 17 00:00:00 2001 From: Daniil Fedotov Date: Fri, 26 Apr 2019 16:53:56 -0400 Subject: Report stacktrace in non-transactions activity function errors. If an activity function fails with an error, the stacktrace is dropped in non_transaction function try/catch clause. This makes debuging of errors inside a transaction really hard. Transaction activities handle errors and exits differently, non-transaction activities should do the same. Adding the stacktrace to the exit reason when translating errors to exits. --- lib/mnesia/src/mnesia_tm.erl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/mnesia/src/mnesia_tm.erl') diff --git a/lib/mnesia/src/mnesia_tm.erl b/lib/mnesia/src/mnesia_tm.erl index cbf7db28f0..8b79fca1d7 100644 --- a/lib/mnesia/src/mnesia_tm.erl +++ b/lib/mnesia/src/mnesia_tm.erl @@ -743,8 +743,9 @@ non_transaction(OldState, Fun, Args, ActivityKind, Mod) -> {aborted, Reason} -> mnesia:abort(Reason); Res -> Res catch - throw:Throw -> throw(Throw); - _:Reason -> exit(Reason) + throw:Throw -> throw(Throw); + error:Reason:ST -> exit({Reason, ST}); + exit:Reason -> exit(Reason) after case OldState of undefined -> erase(mnesia_activity_state); -- cgit v1.2.3