diff options
Diffstat (limited to 'cpp/src/qpid/cluster/Connection.cpp')
-rw-r--r-- | cpp/src/qpid/cluster/Connection.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/cpp/src/qpid/cluster/Connection.cpp b/cpp/src/qpid/cluster/Connection.cpp index 4aa66cce1f..0db4a01f3f 100644 --- a/cpp/src/qpid/cluster/Connection.cpp +++ b/cpp/src/qpid/cluster/Connection.cpp @@ -106,23 +106,26 @@ void Connection::closed() { QPID_LOG(debug, "Connection closed " << *this); if (catchUp) { - catchUp = false; cluster.catchUpClosed(boost::intrusive_ptr<Connection>(this)); - if (!isShadow()) connection.closed(); + if (isShadow()) + catchUp = false; + else + connection.closed(); } - - // Local network connection has closed. We need to keep the - // connection around but replace the output handler with a - // no-op handler as the network output handler will be - // deleted. - output.setOutputHandler(discardHandler); - - if (isLocal()) { - // This was a local replicated connection. Multicast a deliver - // closed and process any outstanding frames from the cluster - // until self-delivery of deliver-close. - cluster.mcastControl(ClusterConnectionDeliverCloseBody(), this); - ++mcastSeq; + else { + // Local network connection has closed. We need to keep the + // connection around but replace the output handler with a + // no-op handler as the network output handler will be + // deleted. + output.setOutputHandler(discardHandler); + + if (isLocal()) { + // This was a local replicated connection. Multicast a deliver + // closed and process any outstanding frames from the cluster + // until self-delivery of deliver-close. + cluster.mcastControl(ClusterConnectionDeliverCloseBody(), this); + ++mcastSeq; + } } } catch (const std::exception& e) { |