]> granicus.if.org Git - ejabberd/commitdiff
Don't let a receiver to crash if a controller is unavailable
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Thu, 22 Jun 2017 13:58:46 +0000 (16:58 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Thu, 22 Jun 2017 13:58:46 +0000 (16:58 +0300)
Fixes #1796

src/ejabberd_c2s.erl
src/ejabberd_s2s_in.erl
src/ejabberd_s2s_out.erl
src/ejabberd_socket.erl

index 8f374a440cda625e215c59f0595e5898b10eb50c..7cbc16f9da6968df25154162cddcea73c0b3c766 100644 (file)
 start(SockData, Opts) ->
     case proplists:get_value(supervisor, Opts, true) of
        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],
                                 ejabberd_config:fsm_limit_opts(Opts))
index 76a844f87cf04921a493065857b066273bb2a06d..48a650a4ee8670acd27e11e9835516a9dcf6456b 100644 (file)
 start(SockData, Opts) ->
     case proplists:get_value(supervisor, Opts, true) of
        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],
                                 ejabberd_config:fsm_limit_opts(Opts))
index bcacd8e77bb63f17b2c8855576d58ebaab54bf2e..e8cad9792001abc8d75c578a9566215c1745f633 100644 (file)
 %%%===================================================================
 start(From, To, Opts) ->
     case proplists:get_value(supervisor, Opts, true) of
-          true ->
-           supervisor:start_child(ejabberd_s2s_out_sup,
-                                  [From, To, Opts]);
-               _ ->
+       true ->
+           case supervisor:start_child(ejabberd_s2s_out_sup,
+                                       [From, To, Opts]) of
+               {ok, undefined} -> ignore;
+               Res -> Res
+           end;
+       _ ->
            xmpp_stream_out:start(?MODULE, [ejabberd_socket, From, To, Opts],
                                  ejabberd_config:fsm_limit_opts([]))
     end.
index e1712be2ffd416165ad766e83df48636c1b785a2..9953a76ae2b4c7ffae90488a7304415662ca04ab 100644 (file)
@@ -87,7 +87,7 @@
 %% API
 %%====================================================================
 -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) ->
     case Module:socket_type() of
        independent -> {ok, independent};