diff options
| author | Alan Conway <aconway@apache.org> | 2008-01-11 01:28:31 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2008-01-11 01:28:31 +0000 |
| commit | 829a8229e10cf4d1a067a716567397226cff3d52 (patch) | |
| tree | 7d0e658c92f53086600dd90bec2ffb816dae5f60 /qpid/cpp/src | |
| parent | b8f05c981543c406c17cc3aa8362b360449bb5e3 (diff) | |
| download | qpid-python-829a8229e10cf4d1a067a716567397226cff3d52.tar.gz | |
Fix bug in Connector - incorrect use of iterator.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@611009 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/client/Connector.cpp | 20 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/client/Connector.h | 2 |
2 files changed, 11 insertions, 11 deletions
diff --git a/qpid/cpp/src/qpid/client/Connector.cpp b/qpid/cpp/src/qpid/client/Connector.cpp index 0e3afdd3f0..95314dcb40 100644 --- a/qpid/cpp/src/qpid/client/Connector.cpp +++ b/qpid/cpp/src/qpid/client/Connector.cpp @@ -166,7 +166,7 @@ struct Connector::Buff : public AsynchIO::BufferBase { ~Buff() { delete [] bytes;} }; -Connector::Writer::Writer() : aio(0), buffer(0), lastEof(frames.begin()) {} +Connector::Writer::Writer() : aio(0), buffer(0), lastEof(0) {} Connector::Writer::~Writer() { delete buffer; } @@ -180,7 +180,7 @@ void Connector::Writer::handle(framing::AMQFrame& frame) { Mutex::ScopedLock l(lock); frames.push_back(frame); if (frame.getEof()) { - lastEof = frames.end(); + lastEof = frames.size(); aio->notifyPendingWrite(); } QPID_LOG(trace, "SENT [" << this << "]: " << frame); @@ -206,18 +206,18 @@ void Connector::Writer::newBuffer(const Mutex::ScopedLock&) { } // Called in IO thread. -void Connector::Writer::write(sys::AsynchIO& aio_) { +void Connector::Writer::write(sys::AsynchIO&) { Mutex::ScopedLock l(lock); - assert(&aio_ == aio); assert(buffer); - for (Frames::iterator i = frames.begin(); i != lastEof; ++i) { - if (i->size() > encode.available()) writeOne(l); - assert(i->size() <= encode.available()); - i->encode(encode); + for (size_t i = 0; i < lastEof; ++i) { + AMQFrame& frame = frames[i]; + if (frame.size() > encode.available()) writeOne(l); + assert(frame.size() <= encode.available()); + frame.encode(encode); ++framesEncoded; } - frames.erase(frames.begin(), lastEof); - lastEof = frames.begin(); + frames.erase(frames.begin(), frames.begin()+lastEof); + lastEof = 0; if (encode.getPosition() > 0) writeOne(l); } diff --git a/qpid/cpp/src/qpid/client/Connector.h b/qpid/cpp/src/qpid/client/Connector.h index 9897789901..aefd91f6f4 100644 --- a/qpid/cpp/src/qpid/client/Connector.h +++ b/qpid/cpp/src/qpid/client/Connector.h @@ -56,7 +56,7 @@ class Connector : public framing::OutputHandler, sys::AsynchIO* aio; BufferBase* buffer; Frames frames; - Frames::iterator lastEof; // Points after last EOF in frames + size_t lastEof; // Position after last EOF in frames framing::Buffer encode; size_t framesEncoded; |
