diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2010-08-09 17:09:17 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-08-09 17:09:17 +0100 |
commit | 2222b5fd4e118ec335d29d87d634bf37f3f22610 (patch) | |
tree | ad78c926b04f45a8ea5938d05302e0807b930c03 | |
parent | a8dc08b2730d9330c438da4afb41e20e9fe5e00e (diff) | |
download | rabbitmq-server-2222b5fd4e118ec335d29d87d634bf37f3f22610.tar.gz |
Flush the writer much earlier on, allowing the actual termination to be less risky
-rw-r--r-- | src/rabbit_channel.erl | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index f8d4f307..e93b6665 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -202,7 +202,8 @@ handle_cast({method, Method, Content}, State) -> noreply(NewState); {noreply, NewState} -> noreply(NewState); - stop -> + flush_and_stop -> + rabbit_writer:flush(State#ch.writer_pid), {stop, normal, State#ch{state = terminating}} catch exit:Reason = #amqp_error{} -> @@ -409,7 +410,7 @@ handle_method(_Method, _, #ch{state = starting}) -> handle_method(#'channel.close'{}, _, State = #ch{writer_pid = WriterPid}) -> ok = rollback_and_notify(State), ok = rabbit_writer:send_command(WriterPid, #'channel.close_ok'{}), - stop; + flush_and_stop; handle_method(#'access.request'{},_, State) -> {reply, #'access.request_ok'{ticket = 1}, State}; @@ -1099,10 +1100,9 @@ internal_deliver(WriterPid, Notify, ConsumerTag, DeliveryTag, false -> rabbit_writer:send_command(WriterPid, M, Content) end. -terminate(#ch{writer_pid = WriterPid, limiter_pid = LimiterPid}) -> +terminate(#ch{limiter_pid = LimiterPid}) -> pg_local:leave(rabbit_channels, self()), rabbit_event:notify(channel_closed, [{pid, self()}]), - rabbit_writer:flush(WriterPid), rabbit_limiter:shutdown(LimiterPid). infos(Items, State) -> [{Item, i(Item, State)} || Item <- Items]. |