summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-02-11 15:22:13 +0000
committerMatthew Sackman <matthew@rabbitmq.com>2011-02-11 15:22:13 +0000
commit5a6064f8baaab464e3877d22a0f2cc66cb9371cd (patch)
tree71b6e1ad97f5d6a3eb4d67b4cbf853d486a750ef /src
parent4279f12c8d9acc06cdfbcf30c0bab2bdc97a5740 (diff)
downloadrabbitmq-server-git-5a6064f8baaab464e3877d22a0f2cc66cb9371cd.tar.gz
Demonitor on channel_cleanup
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_reader.erl15
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) ->