diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-11 15:22:13 +0000 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-11 15:22:13 +0000 |
| commit | 5a6064f8baaab464e3877d22a0f2cc66cb9371cd (patch) | |
| tree | 71b6e1ad97f5d6a3eb4d67b4cbf853d486a750ef | |
| parent | 4279f12c8d9acc06cdfbcf30c0bab2bdc97a5740 (diff) | |
| download | rabbitmq-server-git-5a6064f8baaab464e3877d22a0f2cc66cb9371cd.tar.gz | |
Demonitor on channel_cleanup
| -rw-r--r-- | src/rabbit_reader.erl | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index e5862a9267..a940310593 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -371,13 +371,14 @@ handle_dependent_exit(ChPid, Reason, State) -> channel_cleanup(ChPid) -> case get({ch_pid, ChPid}) of - undefined -> undefined; - Channel -> erase({channel, Channel}), - erase({ch_pid, ChPid}), - Channel + undefined -> undefined; + {Channel, MRef} -> erase({channel, Channel}), + erase({ch_pid, ChPid}), + erlang:demonitor(MRef, [flush]), + Channel end. -all_channels() -> [ChPid || {{ch_pid, ChPid}, _Channel} <- get()]. +all_channels() -> [ChPid || {{ch_pid, ChPid}, _ChannelMRef} <- get()]. terminate_channels() -> NChannels = @@ -853,11 +854,11 @@ send_to_new_channel(Channel, AnalyzedFrame, State) -> rabbit_channel_sup_sup:start_channel( ChanSupSup, {tcp, Protocol, Sock, Channel, FrameMax, self(), User, VHost, Collector}), - erlang:monitor(process, ChPid), + MRef = erlang:monitor(process, ChPid), NewAState = process_channel_frame(AnalyzedFrame, self(), Channel, ChPid, AState), put({channel, Channel}, {ChPid, NewAState}), - put({ch_pid, ChPid}, Channel), + put({ch_pid, ChPid}, {Channel, MRef}), State. process_channel_frame(Frame, ErrPid, Channel, ChPid, AState) -> |
