From 6b8bc811ac02271094c110e5fd3c274410dd0f33 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Sun, 1 Jul 2018 14:26:49 +0300 Subject: [PATCH] Don't crash on most common gen_server:call errors --- src/ejabberd_sql.erl | 9 +++++++-- src/mod_stream_mgmt.erl | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl index 28103430a..970dece3f 100644 --- a/src/ejabberd_sql.erl +++ b/src/ejabberd_sql.erl @@ -580,8 +580,13 @@ sql_query_internal(#sql_query{} = Query) -> sqlite -> sqlite_sql_query(Query) end - catch - Class:Reason -> + catch exit:{timeout, _} -> + {error, <<"timed out">>}; + exit:{killed, _} -> + {error, <<"killed">>}; + exit:{normal, _} -> + {error, <<"terminated unexpectedly">>}; + Class:Reason -> ST = erlang:get_stacktrace(), ?ERROR_MSG("Internal error while processing SQL query: ~p", [{Class, Reason, ST}]), diff --git a/src/mod_stream_mgmt.erl b/src/mod_stream_mgmt.erl index 62124b22e..6fb601817 100644 --- a/src/mod_stream_mgmt.erl +++ b/src/mod_stream_mgmt.erl @@ -682,6 +682,8 @@ inherit_session_state(#{user := U, server := S, {error, <<"Previous session PID is dead">>}; exit:{normal, _} -> {error, <<"Previous session PID has exited">>}; + exit:{killed, _} -> + {error, <<"Previous session PID has been killed">>}; exit:{timeout, _} -> ejabberd_sm:close_session(OldSID, U, S, R), ejabberd_c2s:stop(OldPID),