diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-06-01 14:48:14 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-06-01 16:12:22 +0200 |
commit | 548ef7b835fbf2ad965bb4bb3a6f4e4905717002 (patch) | |
tree | 06547ef5c5d730a8a2463697772680bbaf4b113e | |
parent | Always 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.erl | 19 |
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) -> |