diff options
author | Robert Newson <rnewson@apache.org> | 2023-03-22 15:59:55 +0000 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2023-03-22 17:47:30 +0000 |
commit | 451d4bdd6844a692cad2ab547e0a513daf1e88b0 (patch) | |
tree | f88a63a808151ed01631ac8adfe9c15d9ccbed95 | |
parent | 65ad03c0fbd827220712a030888b91013c692ea1 (diff) | |
download | couchdb-451d4bdd6844a692cad2ab547e0a513daf1e88b0.tar.gz |
log the original stack trace if Mod:Func throws
-rw-r--r-- | src/couch_event/src/couch_event_listener_mfa.erl | 25 |
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) -> |