diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2018-07-01 14:26:49 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2018-07-01 14:26:49 +0300 |
commit | 6b8bc811ac02271094c110e5fd3c274410dd0f33 (patch) | |
tree | 4b0c88202ff3ecb713717faea1fde73205b73c4a /src | |
parent | Accept IP address as a return value from resolve/2 callback (diff) |
Don't crash on most common gen_server:call errors
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_sql.erl | 9 | ||||
-rw-r--r-- | 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), |