You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/05/26 23:46:04 UTC
svn commit: r660320 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/client:
Connection.cpp Connection.h ConnectionImpl.cpp ConnectionImpl.h Connector.h
Author: aconway
Date: Mon May 26 14:46:00 2008
New Revision: 660320
URL: http://svn.apache.org/viewvc?rev=660320&view=rev
Log:
Fixed intermittent leak of client::Connector thread.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
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.h
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp Mon May 26 14:46:00 2008
@@ -63,9 +63,13 @@
open(settings);
}
+bool Connection::isOpen() const {
+ return impl && impl->isOpen();
+}
+
void Connection::open(const ConnectionSettings& settings)
{
- if (impl)
+ if (isOpen())
throw Exception(QPID_MSG("Connection::open() was already called"));
impl = shared_ptr<ConnectionImpl>(new ConnectionImpl(version, settings));
@@ -74,7 +78,7 @@
}
Session Connection::newSession(const std::string& name) {
- if (!impl)
+ if (!isOpen())
throw Exception(QPID_MSG("Connection has not yet been opened"));
shared_ptr<SessionImpl> simpl(
new SessionImpl(name, impl, ++channelIdCounter, max_frame_size));
@@ -86,8 +90,8 @@
}
void Connection::resume(Session& session) {
- if (!impl)
- throw Exception(QPID_MSG("Connection has not yet been opened"));
+ if (!isOpen())
+ throw Exception(QPID_MSG("Connection is not open."));
session.impl->setChannel(++channelIdCounter);
impl->addSession(session.impl);
@@ -95,10 +99,7 @@
}
void Connection::close() {
- if (impl) {
- impl->close();
- impl.reset();
- }
+ impl->close();
}
}} // namespace qpid::client
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h Mon May 26 14:46:00 2008
@@ -121,6 +121,8 @@
* on a different connection to the one that created it.
*/
void resume(Session& session);
+
+ bool isOpen() const;
};
}} // namespace qpid::client
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?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Mon May 26 14:46:00 2008
@@ -138,7 +138,6 @@
SessionVector save;
{
Mutex::ScopedLock l(lock);
- if (isClosed) return;
save = closeInternal(l);
}
std::for_each(save.begin(), save.end(), boost::bind(&SessionImpl::connectionClosed, _1, code, text));
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?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Mon May 26 14:46:00 2008
@@ -74,6 +74,7 @@
~ConnectionImpl();
void open(const std::string& host, int port);
+ bool isOpen() const { return !isClosed && !isClosing; }
void addSession(const boost::shared_ptr<SessionImpl>&);
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=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h Mon May 26 14:46:00 2008
@@ -126,8 +126,6 @@
ConnectionImpl* impl;
- friend class Channel;
-
public:
Connector(framing::ProtocolVersion pVersion,
const ConnectionSettings&,