diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-11 13:18:54 +0000 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-11 13:18:54 +0000 |
| commit | 2bfc5a5d00549c76e484ad4613fb7f8f3096adb6 (patch) | |
| tree | 3ec576cf135ad001047d772b626182a911875c19 /src | |
| parent | 5510373266051521648e0388877eac481669d864 (diff) | |
| download | rabbitmq-server-git-2bfc5a5d00549c76e484ad4613fb7f8f3096adb6.tar.gz | |
Move the state modification into rollback_and_notify
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_channel.erl | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index cdf8015c76..74a93f9f47 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -306,15 +306,12 @@ handle_pre_hibernate(State = #ch{stats_timer = StatsTimer}) -> {hibernate, State#ch{stats_timer = StatsTimer1}}. terminate(Reason, State) -> - case State#ch.state of - closing -> ok; - _ -> Res = rollback_and_notify(State), - case Reason of - normal -> ok = Res; - shutdown -> ok = Res; - {shutdown, _Term} -> ok = Res; - _ -> ok - end + {Res, _State1} = rollback_and_notify(State), + case Reason of + normal -> ok = Res; + shutdown -> ok = Res; + {shutdown, _Term} -> ok = Res; + _ -> ok end, pg_local:leave(rabbit_channels, self()), rabbit_event:notify(channel_closed, [{pid, self()}]). @@ -364,8 +361,7 @@ send_exception(Reason, State = #ch{protocol = Protocol, rabbit_log:error("connection ~p, channel ~p - error:~n~p~n", [ReaderPid, Channel, Reason]), %% something bad's happened: rollback_and_notify make not be 'ok' - rollback_and_notify(State), - State1 = State#ch{state = closing}, + {_Result, State1} = rollback_and_notify(State), case CloseChannel of Channel -> ok = rabbit_writer:send_command(WriterPid, CloseMethod), @@ -561,8 +557,8 @@ handle_method(#'channel.close'{}, _, State = #ch{reader_pid = ReaderPid, fun () -> ok = gen_server2:cast(Self, closed) end}, %% no error, so rollback_and_notify should be 'ok'. Do in parallel %% with the reader picking up our message and running our Fun. - ok = rollback_and_notify(State), - {noreply, State#ch{state = closing}}; + {ok, State1} = rollback_and_notify(State), + {noreply, State1}; handle_method(#'access.request'{},_, State) -> {reply, #'access.request_ok'{ticket = 1}, State}; @@ -1202,10 +1198,13 @@ internal_rollback(State = #ch{transaction_id = TxnKey, NewUAMQ = queue:join(UAQ, UAMQ), new_tx(State#ch{unacked_message_q = NewUAMQ}). +rollback_and_notify(State = #ch{state = closing}) -> + {ok, State}; rollback_and_notify(State = #ch{transaction_id = none}) -> - notify_queues(State); + {notify_queues(State), State#ch{state = closing}}; rollback_and_notify(State) -> - notify_queues(internal_rollback(State)). + State1 = internal_rollback(State), + {notify_queues(State1), State1#ch{state = closing}}. fold_per_queue(F, Acc0, UAQ) -> D = rabbit_misc:queue_fold( |
