summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2011-09-18 23:20:52 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2011-09-18 23:20:52 +0100
commitaaa37d459dfdc18e394dfef01e204072cb5ce716 (patch)
treea1ead26ab551bbea7e8344c4c276299a81198d88
parent368e4e66f9f2971dfeb0faab88c6a503e0cee40b (diff)
parent48b5866cd34a4db290d7d6a2f4cbe1b73927104a (diff)
downloadrabbitmq-server-aaa37d459dfdc18e394dfef01e204072cb5ce716.tar.gz
merge default into bug24433
-rw-r--r--src/rabbit_amqqueue_process.erl32
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;