diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2010-08-05 10:29:32 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2010-08-05 10:29:32 +0100 |
commit | 8208718a3b3828df0bec20bb86fb7e4ec654136f (patch) | |
tree | 84ad50b22f3bf011c3a1b0e1d01c8dbe2bff5fe8 | |
parent | c8dd15f8a297eaa80fd5b295e5f9bd737483aa0c (diff) | |
parent | b9ec85edecdb3957c7430af8a7dd208397aff6d7 (diff) | |
download | rabbitmq-server-8208718a3b3828df0bec20bb86fb7e4ec654136f.tar.gz |
Merge bug23060 into default.
-rw-r--r-- | src/rabbit_reader.erl | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 532572fd..4b612f2a 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -380,8 +380,14 @@ terminate(Explanation, State = #v1{connection_state = running}) -> terminate(_Explanation, State) -> {force, State}. -close_connection(State = #v1{connection = #connection{ +close_connection(State = #v1{queue_collector = Collector, + connection = #connection{ timeout_sec = TimeoutSec}}) -> + %% The spec says "Exclusive queues may only be accessed by the + %% current connection, and are deleted when that connection + %% closes." This does not strictly imply synchrony, but in + %% practice it seems to be what people assume. + rabbit_queue_collector:delete_all(Collector), %% We terminate the connection after the specified interval, but %% no later than ?CLOSING_TIMEOUT seconds. TimeoutMillisec = @@ -457,18 +463,13 @@ wait_for_channel_termination(N, TimerRef) -> end. maybe_close(State = #v1{connection_state = closing, - queue_collector = Collector, connection = #connection{protocol = Protocol}, sock = Sock}) -> case all_channels() of [] -> - %% Spec says "Exclusive queues may only be accessed by the current - %% connection, and are deleted when that connection closes." - %% This does not strictly imply synchrony, but in practice it seems - %% to be what people assume. - rabbit_queue_collector:delete_all(Collector), + NewState = close_connection(State), ok = send_on_channel0(Sock, #'connection.close_ok'{}, Protocol), - close_connection(State); + NewState; _ -> State end; maybe_close(State) -> |