summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2023-03-22 15:59:55 +0000
committerRobert Newson <rnewson@apache.org>2023-03-22 17:47:30 +0000
commit451d4bdd6844a692cad2ab547e0a513daf1e88b0 (patch)
treef88a63a808151ed01631ac8adfe9c15d9ccbed95
parent65ad03c0fbd827220712a030888b91013c692ea1 (diff)
downloadcouchdb-451d4bdd6844a692cad2ab547e0a513daf1e88b0.tar.gz
log the original stack trace if Mod:Func throws
-rw-r--r--src/couch_event/src/couch_event_listener_mfa.erl25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/couch_event/src/couch_event_listener_mfa.erl b/src/couch_event/src/couch_event_listener_mfa.erl
index b4cd9148a..5ec465cf7 100644
--- a/src/couch_event/src/couch_event_listener_mfa.erl
+++ b/src/couch_event/src/couch_event_listener_mfa.erl
@@ -76,13 +76,24 @@ terminate(_Reason, _MFA) ->
ok.
handle_event(DbName, Event, #st{mod = Mod, func = Func, state = State} = St) ->
- case (catch Mod:Func(DbName, Event, State)) of
- {ok, NewState} ->
- {ok, St#st{state = NewState}};
- stop ->
- {stop, normal, St};
- Else ->
- erlang:error(Else)
+ try
+ case Mod:Func(DbName, Event, State) of
+ {ok, NewState} ->
+ {ok, St#st{state = NewState}};
+ stop ->
+ {stop, normal, St};
+ Else ->
+ couch_log:error("~p: else in handle_event for db ~p, event ~p, else ~p", [
+ ?MODULE, DbName, Event, Else
+ ]),
+ erlang:error(Else)
+ end
+ catch
+ Class:Reason:Stack ->
+ couch_log:error("~p: ~p in handle_event for db ~p, event ~p, reason ~p, stack ~p", [
+ ?MODULE, Class, DbName, Event, Reason, Stack
+ ]),
+ erlang:raise(Class, Reason, Stack)
end.
handle_cast(shutdown, St) ->