diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2010-10-13 14:36:50 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-10-13 14:36:50 +0100 |
commit | ca6779477e3b81295063abadcb820d75e9c70542 (patch) | |
tree | cb3d7428c78681322e69665f1c319cc6451e1d4d | |
parent | 0f57b24149938a00fc0106cb33cd51584619cbcd (diff) | |
download | rabbitmq-server-bug23159.tar.gz |
This was clearly never tested with > 1 queue: we must be able to cope with both delete_from =/= undefined andalso dict:size > 1; finally, do the erase first, and then we can test for size == 0, which is a little more obviousbug23159
-rw-r--r-- | src/rabbit_queue_collector.erl | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/rabbit_queue_collector.erl b/src/rabbit_queue_collector.erl index e5215660..6ac402c8 100644 --- a/src/rabbit_queue_collector.erl +++ b/src/rabbit_queue_collector.erl @@ -93,11 +93,12 @@ handle_cast(Msg, State) -> handle_info({'DOWN', MonitorRef, process, _DownPid, _Reason}, State = #state{queues = Queues, delete_from = Deleting}) -> - case {Deleting, dict:size(Queues)} of - {undefined, _} -> ok; - {_, 1} -> gen_server:reply(Deleting, ok) + Queues1 = dict:erase(MonitorRef, Queues), + case Deleting =/= undefined andalso dict:size(Queues1) =:= 0 of + true -> gen_server:reply(Deleting, ok); + false -> ok end, - {noreply, State#state{queues = dict:erase(MonitorRef, Queues)}}. + {noreply, State#state{queues = Queues1}}. terminate(_Reason, _State) -> ok. |