You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2008/07/24 06:42:51 UTC
svn commit: r679268 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/client:
ConnectionHandler.cpp ConnectionHandler.h ConnectionImpl.cpp ConnectionImpl.h
Author: astitcher
Date: Wed Jul 23 21:42:51 2008
New Revision: 679268
URL: http://svn.apache.org/viewvc?rev=679268&view=rev
Log:
Refactor to change client connector state machine to be held in ConnectionHandler
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h
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?rev=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp Wed Jul 23 21:42:51 2008
@@ -186,3 +186,14 @@
}
setState(CLOSED);
}
+
+bool ConnectionHandler::isOpen() const
+{
+ return getState() == OPEN;
+}
+
+bool ConnectionHandler::isClosed() const
+{
+ int s = getState();
+ return s == CLOSING || s == CLOSED || s == FAILED;
+}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h?rev=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h Wed Jul 23 21:42:51 2008
@@ -96,6 +96,10 @@
void close();
void fail(const std::string& message);
+ // Note that open and closed aren't related by open = !closed
+ bool isOpen() const;
+ bool isClosed() const;
+
CloseListener onClose;
ErrorListener onError;
};
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=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Wed Jul 23 21:42:51 2008
@@ -40,9 +40,7 @@
: Bounds(settings.maxFrameSize * settings.bounds),
handler(settings, v),
connector(new Connector(v, settings, this)),
- version(v),
- isClosed(true),//closed until successfully opened
- isClosing(false)
+ version(v)
{
QPID_LOG(debug, "ConnectionImpl created for " << version);
handler.in = boost::bind(&ConnectionImpl::incoming, this, _1);
@@ -91,7 +89,7 @@
bool ConnectionImpl::isOpen() const
{
- return !isClosed && !isClosing;
+ return handler.isOpen();
}
@@ -101,8 +99,6 @@
connector->connect(host, port);
connector->init();
handler.waitForOpen();
- Mutex::ScopedLock l(lock);
- isClosed = false;
}
void ConnectionImpl::idleIn()
@@ -118,19 +114,13 @@
void ConnectionImpl::close()
{
- Mutex::ScopedLock l(lock);
- if (isClosing || isClosed) return;
- isClosing = true;
- {
- Mutex::ScopedUnlock u(lock);
- handler.close();
- }
+ if (!handler.isOpen()) return;
+ handler.close();
closed(NORMAL, "Closed by client");
}
template <class F> void ConnectionImpl::closeInternal(const F& f) {
- isClosed = true;
connector->close();
for (SessionMap::iterator i = sessions.begin(); i != sessions.end(); ++i) {
boost::shared_ptr<SessionImpl> s = i->second.lock();
@@ -151,7 +141,7 @@
Mutex::ScopedLock l(lock);
// FIXME aconway 2008-06-06: exception use, connection-forced is incorrect here.
setException(new ConnectionException(CONNECTION_FORCED, CONN_CLOSED));
- if (isClosed) return;
+ if (handler.isClosed()) return;
handler.fail(CONN_CLOSED);
closeInternal(boost::bind(&SessionImpl::connectionBroke, _1, CONNECTION_FORCED, CONN_CLOSED));
}
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=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Wed Jul 23 21:42:51 2008
@@ -56,8 +56,6 @@
boost::scoped_ptr<Connector> connector;
framing::ProtocolVersion version;
sys::Mutex lock;
- bool isClosed;
- bool isClosing;
template <class F> void closeInternal(const F&);
@@ -66,7 +64,6 @@
void idleOut();
void idleIn();
void shutdown();
- bool setClosing();
public:
ConnectionImpl(framing::ProtocolVersion version, const ConnectionSettings& settings);