Index: branches/ejabberd-2.1.x/src/ejabberd_c2s.erl
===================================================================
diff -u -N -r2911 -r2936
--- branches/ejabberd-2.1.x/src/ejabberd_c2s.erl (.../ejabberd_c2s.erl) (revision 2911)
+++ branches/ejabberd-2.1.x/src/ejabberd_c2s.erl (.../ejabberd_c2s.erl) (revision 2936)
@@ -28,8 +28,10 @@
-author('alexey@process-one.net').
-update_info({update, 0}).
--behaviour(gen_fsm).
+-define(GEN_FSM, p1_fsm).
+-behaviour(?GEN_FSM).
+
%% External exports
-export([start/2,
stop/1,
@@ -104,8 +106,8 @@
%% Module start with or without supervisor:
-ifdef(NO_TRANSIENT_SUPERVISORS).
--define(SUPERVISOR_START, gen_fsm:start(ejabberd_c2s, [SockData, Opts],
- ?FSMOPTS)).
+-define(SUPERVISOR_START, ?GEN_FSM:start(ejabberd_c2s, [SockData, Opts],
+ fsm_limit_opts() ++ ?FSMOPTS)).
-else.
-define(SUPERVISOR_START, supervisor:start_child(ejabberd_c2s_sup,
[SockData, Opts])).
@@ -140,17 +142,18 @@
?SUPERVISOR_START.
start_link(SockData, Opts) ->
- gen_fsm:start_link(ejabberd_c2s, [SockData, Opts], ?FSMOPTS).
+ ?GEN_FSM:start_link(ejabberd_c2s, [SockData, Opts],
+ fsm_limit_opts() ++ ?FSMOPTS).
socket_type() ->
xml_stream.
%% Return Username, Resource and presence information
get_presence(FsmRef) ->
- gen_fsm:sync_send_all_state_event(FsmRef, {get_presence}, 1000).
+ ?GEN_FSM:sync_send_all_state_event(FsmRef, {get_presence}, 1000).
stop(FsmRef) ->
- gen_fsm:send_event(FsmRef, closed).
+ ?GEN_FSM:send_event(FsmRef, closed).
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
@@ -221,7 +224,7 @@
%% Return list of all available resources of contacts,
get_subscribed(FsmRef) ->
- gen_fsm:sync_send_all_state_event(FsmRef, get_subscribed, 1000).
+ ?GEN_FSM:sync_send_all_state_event(FsmRef, get_subscribed, 1000).
%%----------------------------------------------------------------------
%% Func: StateName/2
@@ -903,7 +906,7 @@
session_established(timeout, StateData) ->
%% TODO: Options must be stored in state:
Options = [],
- proc_lib:hibernate(gen_fsm, enter_loop,
+ proc_lib:hibernate(?GEN_FSM, enter_loop,
[?MODULE, Options, session_established, StateData]),
fsm_next_state(session_established, StateData);
@@ -2153,6 +2156,14 @@
end
end.
+fsm_limit_opts() ->
+ case ejabberd_config:get_local_option(max_fsm_queue) of
+ N when is_integer(N) ->
+ [{max_queue, N}];
+ _ ->
+ []
+ end.
+
%%%----------------------------------------------------------------------
%%% JID Set memory footprint reduction code
%%%----------------------------------------------------------------------