1
0
Fork 0
mirror of https://github.com/processone/ejabberd synced 2025-10-06 12:00:15 +02:00

Receiving missing http-bind request shouldn't close waiting out-ouf-order request

This commit is contained in:
Paweł Chmielowski 2012-05-02 20:59:09 +02:00
parent 6719d9669b
commit e8921d79ba

View file

@ -441,8 +441,6 @@ handle_sync_event(#http_put{payload_size = PayloadSize} = Request,
%% HTTP GET: send packets to the client %% HTTP GET: send packets to the client
handle_sync_event({http_get, Rid, Wait, Hold}, From, StateName, StateData) -> handle_sync_event({http_get, Rid, Wait, Hold}, From, StateName, StateData) ->
%% setup timer %% setup timer
send_receiver_reply(StateData#state.http_receiver, {ok, empty}),
cancel_timer(StateData#state.wait_timer),
TNow = tnow(), TNow = tnow(),
if if
(Hold > 0) and (Hold > 0) and
@ -450,7 +448,9 @@ handle_sync_event({http_get, Rid, Wait, Hold}, From, StateName, StateData) ->
((TNow - StateData#state.ctime) < (Wait*1000*1000)) and ((TNow - StateData#state.ctime) < (Wait*1000*1000)) and
(StateData#state.rid =< Rid) and (StateData#state.rid =< Rid) and
(StateData#state.input /= cancel) and (StateData#state.input /= cancel) and
(StateData#state.pause == 0) -> (StateData#state.pause == 0) ->
send_receiver_reply(StateData#state.http_receiver, {ok, empty}),
cancel_timer(StateData#state.wait_timer),
WaitTimer = erlang:start_timer(Wait * 1000, self(), []), WaitTimer = erlang:start_timer(Wait * 1000, self(), []),
%% MR: Not sure we should cancel the state timer here. %% MR: Not sure we should cancel the state timer here.
cancel_timer(StateData#state.timer), cancel_timer(StateData#state.timer),
@ -460,6 +460,8 @@ handle_sync_event({http_get, Rid, Wait, Hold}, From, StateName, StateData) ->
wait_timer = WaitTimer, wait_timer = WaitTimer,
timer = undefined}}; timer = undefined}};
(StateData#state.input == cancel) -> (StateData#state.input == cancel) ->
send_receiver_reply(StateData#state.http_receiver, {ok, empty}),
cancel_timer(StateData#state.wait_timer),
cancel_timer(StateData#state.timer), cancel_timer(StateData#state.timer),
Timer = set_inactivity_timer(StateData#state.pause, Timer = set_inactivity_timer(StateData#state.pause,
StateData#state.max_inactivity), StateData#state.max_inactivity),
@ -471,8 +473,6 @@ handle_sync_event({http_get, Rid, Wait, Hold}, From, StateName, StateData) ->
timer = Timer}}; timer = Timer}};
true -> true ->
cancel_timer(StateData#state.timer), cancel_timer(StateData#state.timer),
Timer = set_inactivity_timer(StateData#state.pause,
StateData#state.max_inactivity),
Reply = {ok, StateData#state.output}, Reply = {ok, StateData#state.output},
%% save request %% save request
ReqList = [#hbr{rid = Rid, ReqList = [#hbr{rid = Rid,
@ -482,12 +482,26 @@ handle_sync_event({http_get, Rid, Wait, Hold}, From, StateName, StateData) ->
[El || El <- StateData#state.req_list, [El || El <- StateData#state.req_list,
El#hbr.rid /= Rid ] El#hbr.rid /= Rid ]
], ],
{reply, Reply, StateName, StateData#state{ if
output = [], (StateData#state.http_receiver /= undefined) and
http_receiver = undefined, StateData#state.out_of_order_receiver ->
wait_timer = undefined, {reply, Reply, StateName, StateData#state{
timer = Timer, output = [],
req_list = ReqList}} timer = undefined,
req_list = ReqList,
out_of_order_receiver = false}};
true ->
send_receiver_reply(StateData#state.http_receiver, {ok, empty}),
cancel_timer(StateData#state.wait_timer),
Timer = set_inactivity_timer(StateData#state.pause,
StateData#state.max_inactivity),
{reply, Reply, StateName,
StateData#state{output = [],
http_receiver = undefined,
wait_timer = undefined,
timer = Timer,
req_list = ReqList}}
end
end; end;
handle_sync_event(peername, _From, StateName, StateData) -> handle_sync_event(peername, _From, StateName, StateData) ->