aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-07-01 14:26:49 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-07-01 14:26:49 +0300
commit6b8bc811ac02271094c110e5fd3c274410dd0f33 (patch)
tree4b0c88202ff3ecb713717faea1fde73205b73c4a
parentAccept IP address as a return value from resolve/2 callback (diff)
Don't crash on most common gen_server:call errors
-rw-r--r--src/ejabberd_sql.erl9
-rw-r--r--src/mod_stream_mgmt.erl2
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),