aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2018-06-01 14:48:14 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2018-06-01 16:12:22 +0200
commit548ef7b835fbf2ad965bb4bb3a6f4e4905717002 (patch)
tree06547ef5c5d730a8a2463697772680bbaf4b113e
parentAlways display room's xdata in disco#info (diff)
Don't crash in bosh when we receive request with RID < prev_rid
-rw-r--r--src/ejabberd_bosh.erl19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/ejabberd_bosh.erl b/src/ejabberd_bosh.erl
index 1ec45a3e2..6d2971bd9 100644
--- a/src/ejabberd_bosh.erl
+++ b/src/ejabberd_bosh.erl
@@ -452,7 +452,7 @@ active1(#body{attrs = Attrs} = Req, From, State) ->
{next_state, active,
do_reply(State, From, PrevBody, RID)};
none ->
- State1 = drop_holding_receiver(State),
+ State1 = drop_holding_receiver(State, RID),
State2 = stop_inactivity_timer(State1),
State3 = restart_wait_timer(State2),
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)}.
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
- {value, {From, Body}} ->
- State1 = restart_inactivity_timer(State),
- Receivers = gb_trees:delete_any(RID,
- State1#state.receivers),
- State2 = State1#state{receivers = Receivers},
- do_reply(State2, From, Body, RID);
- none -> State
+ {value, {From, Body}} ->
+ State1 = restart_inactivity_timer(State),
+ Receivers = gb_trees:delete_any(RID,
+ State1#state.receivers),
+ State2 = State1#state{receivers = Receivers},
+ do_reply(State2, From, Body, RID);
+ none -> State
end.
do_reply(State, From, Body, RID) ->