diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2011-09-18 23:20:52 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2011-09-18 23:20:52 +0100 |
commit | aaa37d459dfdc18e394dfef01e204072cb5ce716 (patch) | |
tree | a1ead26ab551bbea7e8344c4c276299a81198d88 | |
parent | 368e4e66f9f2971dfeb0faab88c6a503e0cee40b (diff) | |
parent | 48b5866cd34a4db290d7d6a2f4cbe1b73927104a (diff) | |
download | rabbitmq-server-aaa37d459dfdc18e394dfef01e204072cb5ce716.tar.gz |
merge default into bug24433
-rw-r--r-- | src/rabbit_amqqueue_process.erl | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 44b0ae77..47a9865e 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -638,11 +638,6 @@ handle_ch_down(DownPid, State = #q{exclusive_consumer = Holder}) -> end end. -cancel_holder(ChPid, ConsumerTag, {ChPid, ConsumerTag}) -> - none; -cancel_holder(_ChPid, _ConsumerTag, Holder) -> - Holder. - check_exclusive_access({_ChPid, _ConsumerTag}, _ExclusiveConsume, _State) -> in_use; check_exclusive_access(none, false, _State) -> @@ -990,26 +985,25 @@ handle_call({basic_consume, NoAck, ChPid, Limiter, handle_call({basic_cancel, ChPid, ConsumerTag, OkMsg}, _From, State = #q{exclusive_consumer = Holder}) -> + ok = maybe_send_reply(ChPid, OkMsg), case lookup_ch(ChPid) of not_found -> - ok = maybe_send_reply(ChPid, OkMsg), reply(ok, State); C = #cr{blocked_consumers = Blocked} -> emit_consumer_deleted(ChPid, ConsumerTag), - ok = maybe_send_reply(ChPid, OkMsg), - update_consumer_count(C#cr{blocked_consumers = - remove_consumer(ChPid, ConsumerTag, - Blocked)}, -1), - NewState = - State#q{exclusive_consumer = cancel_holder(ChPid, - ConsumerTag, - Holder), - active_consumers = remove_consumer( - ChPid, ConsumerTag, + Blocked1 = remove_consumer(ChPid, ConsumerTag, Blocked), + update_consumer_count(C#cr{blocked_consumers = Blocked1}, -1), + State1 = State#q{ + exclusive_consumer = case Holder of + {ChPid, ConsumerTag} -> none; + _ -> Holder + end, + active_consumers = remove_consumer( + ChPid, ConsumerTag, State#q.active_consumers)}, - case should_auto_delete(NewState) of - false -> reply(ok, ensure_expiry_timer(NewState)); - true -> {stop, normal, ok, NewState} + case should_auto_delete(State1) of + false -> reply(ok, ensure_expiry_timer(State1)); + true -> {stop, normal, ok, State1} end end; |