summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-10-13 08:44:47 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2012-10-13 08:44:47 +0100
commit3338f612ecd75213351e9ae42833a83606ba3482 (patch)
tree1338f316f4d8885b297410c2c1de683568951325
parent7562d6dbacb54e30e4307eff63632e0ca3ec25fa (diff)
downloadrabbitmq-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.erl20
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} ->