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:
parent
6719d9669b
commit
e8921d79ba
1 changed files with 25 additions and 11 deletions
|
@ -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) ->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue