You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2007/08/06 10:49:28 UTC
svn commit: r563067 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/client:
ConnectionHandler.cpp ConnectionImpl.cpp ConnectionImpl.h Connector.cpp
Author: gsim
Date: Mon Aug 6 01:49:27 2007
New Revision: 563067
URL: http://svn.apache.org/viewvc?view=rev&rev=563067
Log:
Fixed race in connection shutdown preventing Connector from being garbage collected on occasion.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h
incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp Mon Aug 6 01:49:27 2007
@@ -185,10 +185,10 @@
break;
case CLOSING:
if (method->isA<ConnectionCloseOkBody>()) {
- setState(CLOSED);
if (onClose) {
onClose();
}
+ setState(CLOSED);
} else {
QPID_LOG(warning, "Received frame on channel zero while closing connection; frame ignored.");
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Mon Aug 6 01:49:27 2007
@@ -30,6 +30,7 @@
handler.in = boost::bind(&ConnectionImpl::incoming, this, _1);
handler.out = boost::bind(&Connector::send, connector, _1);
handler.onClose = boost::bind(&ConnectionImpl::closed, this);
+ handler.onError = boost::bind(&ConnectionImpl::closedByPeer, this, _1, _2);
connector->setInputHandler(&handler);
connector->setTimeoutHandler(this);
connector->setShutdownHandler(this);
@@ -88,10 +89,10 @@
void ConnectionImpl::closed()
{
- closed(200, "OK");
+ closedByPeer(200, "OK");
}
-void ConnectionImpl::closed(uint16_t code, const std::string& text)
+void ConnectionImpl::closedByPeer(uint16_t code, const std::string& text)
{
for (SessionMap::iterator i = sessions.begin(); i != sessions.end(); i++) {
i->second->closed(code, text);
@@ -114,7 +115,7 @@
void ConnectionImpl::shutdown() {
//this indicates that the socket to the server has closed
for (SessionMap::iterator i = sessions.begin(); i != sessions.end(); i++) {
- i->second->closed(0, "Unexpected scoket closure.");
+ i->second->closed(0, "Unexpected socket closure.");
}
sessions.clear();
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Mon Aug 6 01:49:27 2007
@@ -47,7 +47,7 @@
void incoming(framing::AMQFrame& frame);
void closed();
- void closed(uint16_t, const std::string&);
+ void closedByPeer(uint16_t, const std::string&);
void idleOut();
void idleIn();
void shutdown();
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?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp Mon Aug 6 01:49:27 2007
@@ -47,11 +47,7 @@
outbuf(send_buffer_size)
{ }
-Connector::~Connector(){
- closeInternal();
- if (receiver.id())
- receiver.join();
-}
+Connector::~Connector(){}
void Connector::connect(const std::string& host, int port){
socket.connect(host, port);