This is an automated email from the ASF dual-hosted git repository. gsim pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-cpp.git
commit 8ed016c6bba566e257d72ae3938b4cab34e8778f Author: Gordon Sim <g...@redhat.com> AuthorDate: Tue Mar 19 14:06:59 2019 +0000 QPID-8288: ensure closed is notified without waiting for deletion of connection --- src/qpid/broker/amqp_0_10/Connection.cpp | 10 +++++++++- src/qpid/broker/amqp_0_10/Connection.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/qpid/broker/amqp_0_10/Connection.cpp b/src/qpid/broker/amqp_0_10/Connection.cpp index 4682c1f..7d335c9 100644 --- a/src/qpid/broker/amqp_0_10/Connection.cpp +++ b/src/qpid/broker/amqp_0_10/Connection.cpp @@ -139,6 +139,7 @@ Connection::Connection(ConnectionOutputHandler* out_, heartbeat(0), heartbeatmax(120), isDefaultRealm(false), + hasSignalledClosed(false), securitySettings(external), link(link_), adapter(*this, link), @@ -180,7 +181,10 @@ Connection::~Connection() << " rhost:" << mgmtId ); mgmtObject->resourceDestroy(); } - broker.getConnectionObservers().closed(*this); + if (!hasSignalledClosed) { + broker.getConnectionObservers().closed(*this); + hasSignalledClosed = true; + } if (heartbeatTimer) heartbeatTimer->cancel(); @@ -376,6 +380,10 @@ void Connection::closed(){ // Physically closed, suspend open sessions. QPID_LOG(error, QPID_MSG("While closing connection: " << e.what())); assert(0); } + if (!hasSignalledClosed) { + broker.getConnectionObservers().closed(*this); + hasSignalledClosed = true; + } } void Connection::doIoCallbacks() { diff --git a/src/qpid/broker/amqp_0_10/Connection.h b/src/qpid/broker/amqp_0_10/Connection.h index 8fff520..719683d 100644 --- a/src/qpid/broker/amqp_0_10/Connection.h +++ b/src/qpid/broker/amqp_0_10/Connection.h @@ -196,6 +196,7 @@ class Connection : public sys::ConnectionInputHandler, public qpid::broker::Conn std::vector<Url> knownHosts; std::string userName; bool isDefaultRealm; + bool hasSignalledClosed; typedef boost::ptr_map<framing::ChannelId, SessionHandler> ChannelMap; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org