summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-08-31 09:36:36 +0000
committerGordon Sim <gsim@apache.org>2007-08-31 09:36:36 +0000
commit8fb375f6787dac88f1f53572f3ad65980b989a99 (patch)
tree0d82a0bbda1d873c4eb9af52c232f855e2f6bd3a
parent7f0e4933935fc825812a7ee0ec4277c4ac5e7fcd (diff)
downloadqpid-python-8fb375f6787dac88f1f53572f3ad65980b989a99.tar.gz
Fixed bug where stale iterator is used.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@571410 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/AccumulatedAck.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/qpid/cpp/src/qpid/broker/AccumulatedAck.cpp b/qpid/cpp/src/qpid/broker/AccumulatedAck.cpp
index b5d52ac3be..5603f39410 100644
--- a/qpid/cpp/src/qpid/broker/AccumulatedAck.cpp
+++ b/qpid/cpp/src/qpid/broker/AccumulatedAck.cpp
@@ -35,10 +35,11 @@ void AccumulatedAck::update(DeliveryId first, DeliveryId last){
Range r(first, last);
bool handled = false;
+ bool markMerged = false;
list<Range>::iterator merged = ranges.end();
if (r.mergeable(mark)) {
mark = r.end;
- merged = ranges.begin();
+ markMerged = true;
handled = true;
} else {
for (list<Range>::iterator i = ranges.begin(); i != ranges.end() && !handled; i++) {
@@ -57,9 +58,9 @@ void AccumulatedAck::update(DeliveryId first, DeliveryId last){
while (!ranges.empty() && ranges.front().end <= mark) {
ranges.pop_front();
}
- //new range is incorporated, but may be possible to consolidate
- if (merged == ranges.begin()) {
- //consolidate mark
+ if (markMerged) {
+ //new range is incorporated, but may be possible to consolidate
+ merged = ranges.begin();
while (merged != ranges.end() && merged->mergeable(mark)) {
mark = merged->end;
merged = ranges.erase(merged);