diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-09-02 14:10:41 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-09-02 14:10:41 +0100 |
| commit | c3aa97272cd0667c378559cab177ed873799a746 (patch) | |
| tree | 4b37d2946cc49cc2c8727c60e8e113af7b68ab07 | |
| parent | 0c7017a36e2ee6d522b88a8b6a9777f2ca44173e (diff) | |
| download | rabbitmq-server-git-c3aa97272cd0667c378559cab177ed873799a746.tar.gz | |
made dq:delete_queue a call, not a cast. This eliminates a race condition between queues being deleted and new queues with the same name being created and published to
| -rw-r--r-- | src/rabbit_disk_queue.erl | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/rabbit_disk_queue.erl b/src/rabbit_disk_queue.erl index 6701bc6bec..9282eeb141 100644 --- a/src/rabbit_disk_queue.erl +++ b/src/rabbit_disk_queue.erl @@ -334,7 +334,7 @@ purge(Q) -> gen_server2:call(?SERVER, {purge, Q}, infinity). delete_queue(Q) -> - gen_server2:cast(?SERVER, {delete_queue, Q}). + gen_server2:call(?SERVER, {delete_queue, Q}, infinity). delete_non_durable_queues(DurableQueues) -> gen_server2:call(?SERVER, {delete_non_durable_queues, DurableQueues}, @@ -467,6 +467,10 @@ handle_call({purge, Q}, _From, State) -> reply(Count, State1); handle_call(filesync, _From, State) -> reply(ok, sync_current_file_handle(State)); +handle_call({delete_queue, Q}, From, State) -> + gen_server2:reply(From, ok), + {ok, State1} = internal_delete_queue(Q, State), + noreply(State1); handle_call({len, Q}, _From, State = #dqstate { sequences = Sequences }) -> {ReadSeqId, WriteSeqId} = sequence_lookup(Sequences, Q), reply(WriteSeqId - ReadSeqId, State); @@ -514,9 +518,6 @@ handle_cast({requeue, Q, MsgSeqIds}, State) -> handle_cast({requeue_next_n, Q, N}, State) -> {ok, State1} = internal_requeue_next_n(Q, N, State), noreply(State1); -handle_cast({delete_queue, Q}, State) -> - {ok, State1} = internal_delete_queue(Q, State), - noreply(State1); handle_cast({set_mode, Mode}, State) -> noreply((case Mode of oppressed -> fun to_disk_only_mode/1; |
