[ https://issues.apache.org/jira/browse/QPID-7054?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Justin Ross resolved QPID-7054. ------------------------------- Resolution: Fixed > Crash when closing a sender after the connection has been closed (with patch). > ------------------------------------------------------------------------------ > > Key: QPID-7054 > URL: https://issues.apache.org/jira/browse/QPID-7054 > Project: Qpid > Issue Type: Bug > Components: C++ Client > Affects Versions: qpid-cpp-0.34 > Environment: Red Hat Enterprise Linux Server release 6.7 (Santiago) > The broker is ActiveMQ 5.13.0. > The protocol used in AMQP 1.0. > Reporter: HÃ¥kan Johansson > Assignee: Justin Ross > Priority: Major > Labels: crash, patch > Fix For: qpid-cpp-1.38.0 > > Attachments: crash_test.cc, qpid-7054.2.patch, qpid-7054.patch > > > There will be a crash if you close your _Sender_ after the _Connection_ has > been closed. > To reproduce, compile and run the attached "crash_test.cc" file. > The test program is very simple. It creates _Connection_, _Session_, and > _Sender_ instances, then closes the connection explicitly followed by closing > the sender. The closing of the sender causes an exception to be thrown as the > connection is dead, but that is caught. > The crash happens when the _Session_ object is destructed at the end of the > test function. This causes the _SenderContext_ from the sender to be > destructed, which tries to close the underlying _pn_link_t_ object to be > freed, but that object refers to a deleted _pn_connection_t_ object. The > exception during _Sender::close_ stopped the proper cleanup to be done. > The _Sender::close_ method calls _ConnectionContext::detach_ to disconnect it > from its session. One problem here is that the _Connection::close_ method > made the connection forget all its sessions, but the sessions still remember > their connection, including the underlying proton objects. The connection > tries to reconnect to the broker and resets its internal connection, causing > the proton connection object to be freed. It then tells all its sessions > about this, but those are forgotten earlier. This means that we end up with > _pn_link_t_ objects that refer to a deleted _pn_connection_t_ object. > I have a attached a patch to this jira which stops the > _ConnectionContext::detach_ method from trying to do remote actions if not > connected. The row numbers in this patch assumes that the patch in QPID-7051 > is already applied, which might cause some offset warnings when applying this > patch. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org