diff options
| author | Gordon Sim <gsim@apache.org> | 2007-08-31 09:36:36 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2007-08-31 09:36:36 +0000 |
| commit | 8fb375f6787dac88f1f53572f3ad65980b989a99 (patch) | |
| tree | 0d82a0bbda1d873c4eb9af52c232f855e2f6bd3a | |
| parent | 7f0e4933935fc825812a7ee0ec4277c4ac5e7fcd (diff) | |
| download | qpid-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.cpp | 9 |
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); |
