diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2012-10-13 08:44:47 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2012-10-13 08:44:47 +0100 |
commit | 3338f612ecd75213351e9ae42833a83606ba3482 (patch) | |
tree | 1338f316f4d8885b297410c2c1de683568951325 | |
parent | 7562d6dbacb54e30e4307eff63632e0ca3ec25fa (diff) | |
download | rabbitmq-server-bug25226.tar.gz |
plug leakbug25226
always remove from PendingCh when we receive a msg via gm that we
previously received from the channel.
-rw-r--r-- | src/rabbit_mirror_queue_slave.erl | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/rabbit_mirror_queue_slave.erl b/src/rabbit_mirror_queue_slave.erl index f4679184..9e290126 100644 --- a/src/rabbit_mirror_queue_slave.erl +++ b/src/rabbit_mirror_queue_slave.erl @@ -639,17 +639,15 @@ maybe_enqueue_message( State1 #state { msg_id_status = dict:erase(MsgId, MS), sender_queues = SQ1 }; {ok, published} -> - {MS1, SQ1} = - case needs_confirming(Delivery, State1) of - never -> {dict:erase(MsgId, MS), - remove_from_pending_ch(MsgId, ChPid, SQ)}; - eventually -> MMS = {published, ChPid, MsgSeqNo}, - {dict:store(MsgId, MMS, MS), SQ}; - immediately -> ok = rabbit_misc:confirm_to_sender( - ChPid, [MsgSeqNo]), - {dict:erase(MsgId, MS), - remove_from_pending_ch(MsgId, ChPid, SQ)} - end, + MS1 = case needs_confirming(Delivery, State1) of + never -> dict:erase(MsgId, MS); + eventually -> MMS = {published, ChPid, MsgSeqNo}, + dict:store(MsgId, MMS, MS); + immediately -> ok = rabbit_misc:confirm_to_sender( + ChPid, [MsgSeqNo]), + dict:erase(MsgId, MS) + end, + SQ1 = remove_from_pending_ch(MsgId, ChPid, SQ), State1 #state { msg_id_status = MS1, sender_queues = SQ1 }; {ok, discarded} -> |