From 5cfe57ece56d8b4436f3e862723b560711352508 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Wed, 11 Jan 2017 10:56:04 +0300 Subject: [PATCH] Add 'supervisor' listening option If set to 'true' (this is the default), new processes spawned by ejabberd_listener will be attached to the corresponding supervisor. No such processes will be attached to a supervisor otherwise. Setting this to 'false' will improve performance of high loaded systems where new C2S/S2S processes are spawned very rapidly. --- src/ejabberd_c2s.erl | 9 +++++++-- src/ejabberd_s2s_in.erl | 9 +++++++-- src/ejabberd_s2s_out.erl | 10 ++++++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 007a94dc9..582327d6c 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -63,8 +63,13 @@ %%% ejabberd_socket API %%%=================================================================== start(SockData, Opts) -> - xmpp_stream_in:start(?MODULE, [SockData, Opts], - ejabberd_config:fsm_limit_opts(Opts)). + case proplists:get_value(supervisor, Opts, true) of + true -> + supervisor:start_child(ejabberd_c2s_sup, [SockData, Opts]); + _ -> + xmpp_stream_in:start(?MODULE, [SockData, Opts], + ejabberd_config:fsm_limit_opts(Opts)) + end. start_link(SockData, Opts) -> xmpp_stream_in:start_link(?MODULE, [SockData, Opts], diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl index cca8438c6..484d0a55a 100644 --- a/src/ejabberd_s2s_in.erl +++ b/src/ejabberd_s2s_in.erl @@ -55,8 +55,13 @@ %%% API %%%=================================================================== start(SockData, Opts) -> - xmpp_stream_in:start(?MODULE, [SockData, Opts], - ejabberd_config:fsm_limit_opts(Opts)). + case proplists:get_value(supervisor, Opts, true) of + true -> + supervisor:start_child(ejabberd_s2s_in_sup, [SockData, Opts]); + _ -> + xmpp_stream_in:start(?MODULE, [SockData, Opts], + ejabberd_config:fsm_limit_opts(Opts)) + end. start_link(SockData, Opts) -> xmpp_stream_in:start_link(?MODULE, [SockData, Opts], diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 5188d269b..6217a9f52 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -53,8 +53,14 @@ %%% API %%%=================================================================== start(From, To, Opts) -> - xmpp_stream_out:start(?MODULE, [ejabberd_socket, From, To, Opts], - ejabberd_config:fsm_limit_opts([])). + case proplists:get_value(supervisor, Opts, true) of + true -> + supervisor:start_child(ejabberd_s2s_out_sup, + [ejabberd_socket, From, To, Opts]); + _ -> + xmpp_stream_out:start(?MODULE, [ejabberd_socket, From, To, Opts], + ejabberd_config:fsm_limit_opts([])) + end. start_link(From, To, Opts) -> xmpp_stream_out:start_link(?MODULE, [ejabberd_socket, From, To, Opts],