mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-22 16:20:52 +01:00
Don't crash in bosh when we receive request with RID < prev_rid
This commit is contained in:
parent
4337300fce
commit
548ef7b835
@ -452,7 +452,7 @@ active1(#body{attrs = Attrs} = Req, From, State) ->
|
|||||||
{next_state, active,
|
{next_state, active,
|
||||||
do_reply(State, From, PrevBody, RID)};
|
do_reply(State, From, PrevBody, RID)};
|
||||||
none ->
|
none ->
|
||||||
State1 = drop_holding_receiver(State),
|
State1 = drop_holding_receiver(State, RID),
|
||||||
State2 = stop_inactivity_timer(State1),
|
State2 = stop_inactivity_timer(State1),
|
||||||
State3 = restart_wait_timer(State2),
|
State3 = restart_wait_timer(State2),
|
||||||
Receivers = gb_trees:insert(RID, {From, Req},
|
Receivers = gb_trees:insert(RID, {From, Req},
|
||||||
@ -688,15 +688,16 @@ reply_stop(State, Body, From, RID) ->
|
|||||||
{stop, normal, do_reply(State, From, Body, RID)}.
|
{stop, normal, do_reply(State, From, Body, RID)}.
|
||||||
|
|
||||||
drop_holding_receiver(State) ->
|
drop_holding_receiver(State) ->
|
||||||
RID = State#state.prev_rid,
|
drop_holding_receiver(State#state.prev_rid).
|
||||||
|
drop_holding_receiver(State, RID) ->
|
||||||
case gb_trees:lookup(RID, State#state.receivers) of
|
case gb_trees:lookup(RID, State#state.receivers) of
|
||||||
{value, {From, Body}} ->
|
{value, {From, Body}} ->
|
||||||
State1 = restart_inactivity_timer(State),
|
State1 = restart_inactivity_timer(State),
|
||||||
Receivers = gb_trees:delete_any(RID,
|
Receivers = gb_trees:delete_any(RID,
|
||||||
State1#state.receivers),
|
State1#state.receivers),
|
||||||
State2 = State1#state{receivers = Receivers},
|
State2 = State1#state{receivers = Receivers},
|
||||||
do_reply(State2, From, Body, RID);
|
do_reply(State2, From, Body, RID);
|
||||||
none -> State
|
none -> State
|
||||||
end.
|
end.
|
||||||
|
|
||||||
do_reply(State, From, Body, RID) ->
|
do_reply(State, From, Body, RID) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user