Author: aconway
Date: Thu Jan 10 17:28:31 2008
New Revision: 611009

URL: http://svn.apache.org/viewvc?rev=611009&view=rev
Log:
Fix bug in Connector - incorrect use of iterator.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp?rev=611009&r1=611008&r2=611009&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp Thu Jan 10 
17:28:31 2008
@@ -166,7 +166,7 @@
     ~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 @@
     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 @@
 }
 
 // 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);
 }
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h?rev=611009&r1=611008&r2=611009&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h Thu Jan 10 
17:28:31 2008
@@ -56,7 +56,7 @@
         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;
         


Reply via email to