Don't let a receiver to crash if a controller is unavailable

Fixes #1796
This commit is contained in:
Evgeniy Khramtsov 2017-06-22 16:58:46 +03:00
parent a095477b4c
commit 5bb7a0b0db
4 changed files with 16 additions and 7 deletions

View File

@ -67,7 +67,10 @@
start(SockData, Opts) -> start(SockData, Opts) ->
case proplists:get_value(supervisor, Opts, true) of case proplists:get_value(supervisor, Opts, true) of
true -> true ->
supervisor:start_child(ejabberd_c2s_sup, [SockData, Opts]); case supervisor:start_child(ejabberd_c2s_sup, [SockData, Opts]) of
{ok, undefined} -> ignore;
Res -> Res
end;
_ -> _ ->
xmpp_stream_in:start(?MODULE, [SockData, Opts], xmpp_stream_in:start(?MODULE, [SockData, Opts],
ejabberd_config:fsm_limit_opts(Opts)) ejabberd_config:fsm_limit_opts(Opts))

View File

@ -57,7 +57,10 @@
start(SockData, Opts) -> start(SockData, Opts) ->
case proplists:get_value(supervisor, Opts, true) of case proplists:get_value(supervisor, Opts, true) of
true -> true ->
supervisor:start_child(ejabberd_s2s_in_sup, [SockData, Opts]); case supervisor:start_child(ejabberd_s2s_in_sup, [SockData, Opts]) of
{ok, undefined} -> ignore;
Res -> Res
end;
_ -> _ ->
xmpp_stream_in:start(?MODULE, [SockData, Opts], xmpp_stream_in:start(?MODULE, [SockData, Opts],
ejabberd_config:fsm_limit_opts(Opts)) ejabberd_config:fsm_limit_opts(Opts))

View File

@ -54,10 +54,13 @@
%%%=================================================================== %%%===================================================================
start(From, To, Opts) -> start(From, To, Opts) ->
case proplists:get_value(supervisor, Opts, true) of case proplists:get_value(supervisor, Opts, true) of
true -> true ->
supervisor:start_child(ejabberd_s2s_out_sup, case supervisor:start_child(ejabberd_s2s_out_sup,
[From, To, Opts]); [From, To, Opts]) of
_ -> {ok, undefined} -> ignore;
Res -> Res
end;
_ ->
xmpp_stream_out:start(?MODULE, [ejabberd_socket, From, To, Opts], xmpp_stream_out:start(?MODULE, [ejabberd_socket, From, To, Opts],
ejabberd_config:fsm_limit_opts([])) ejabberd_config:fsm_limit_opts([]))
end. end.

View File

@ -87,7 +87,7 @@
%% API %% API
%%==================================================================== %%====================================================================
-spec start(atom(), sockmod(), socket(), [proplists:property()]) -spec start(atom(), sockmod(), socket(), [proplists:property()])
-> {ok, pid() | independent} | {error, inet:posix() | any()}. -> {ok, pid() | independent} | {error, inet:posix() | any()} | ignore.
start(Module, SockMod, Socket, Opts) -> start(Module, SockMod, Socket, Opts) ->
case Module:socket_type() of case Module:socket_type() of
independent -> {ok, independent}; independent -> {ok, independent};