diff options
Diffstat (limited to 'src/ejabberd_service.erl')
-rw-r--r-- | src/ejabberd_service.erl | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index 2305407b0..09b19c9b7 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -64,10 +64,6 @@ -define(FSMOPTS, []). -endif. -%% Only change this value if you now what your are doing: --define(FSMLIMITS,[]). -%% -define(FSMLIMITS, [{max_queue, 2000}]). - -define(STREAM_HEADER, "<?xml version='1.0'?>" "<stream:stream " @@ -106,8 +102,8 @@ start(SockData, Opts) -> supervisor:start_child(ejabberd_service_sup, [SockData, Opts]). start_link(SockData, Opts) -> - ?GEN_FSM:start_link( - ejabberd_service, [SockData, Opts], ?FSMLIMITS ++ ?FSMOPTS). + ?GEN_FSM:start_link(ejabberd_service, [SockData, Opts], + fsm_limit_opts(Opts) ++ ?FSMOPTS). socket_type() -> xml_stream. @@ -390,3 +386,16 @@ send_element(StateData, El) -> new_id() -> randoms:get_string(). + +fsm_limit_opts(Opts) -> + case lists:keysearch(max_fsm_queue, 1, Opts) of + {value, {_, N}} when is_integer(N) -> + [{max_queue, N}]; + _ -> + case ejabberd_config:get_local_option(max_fsm_queue) of + N when is_integer(N) -> + [{max_queue, N}]; + _ -> + [] + end + end. |