[ https://issues.apache.org/jira/browse/QPID-8057?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex Rudyy updated QPID-8057: ----------------------------- Attachment: TEST-org.apache.qpid.test.unit.transacted.TransactionTimeoutTest.testProducerOpenCommit.txt Attached logs for the test {{org.apache.qpid.test.unit.transacted.TransactionTimeoutTest.testProducerOpenCommit}} which had failed due to running into the issue > [JMS AMQP 0-x][AMQP 0-10] IoReceiver thread can block itself for 60 seconds > after sending session close controls and waiting for broker responses > ------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: QPID-8057 > URL: https://issues.apache.org/jira/browse/QPID-8057 > Project: Qpid > Issue Type: Bug > Components: JMS AMQP 0-x > Affects Versions: qpid-java-6.0.8, qpid-java-client-0-x-6.3.0, > qpid-java-6.1.5 > Reporter: Alex Rudyy > Attachments: > TEST-org.apache.qpid.test.unit.transacted.TransactionTimeoutTest.testProducerOpenCommit.txt > > > IoReceiver thread can "dead lock" itself for 60 seconds after receiving > execution exception from broker and sending session controls to close other > connection sessions. This issue can occur in the following scenario: > * broker sends execution exception > * client receives execution exception and populates field > {{org.apache.qpid.client.AMQSession_0_10#_currentException}} as part of > {{org.apache.qpid.client.AMQSession_0_10#setCurrentException}}. The field is > set using synchronization lock > {{org.apache.qpid.client.AMQSession_0_10#_currentExceptionLock}}. However, > the field is referenced later in > {{org.apache.qpid.client.AMQSession_0_10#setCurrentException}} without the > synchronization lock. It could be reset (set to null) from the application > main thread as part of call > {{org.apache.qpid.client.AMQSession#checkNotClosed}} whilst the execution of > {{org.apache.qpid.client.AMQSession_0_10#setCurrentException}} is still in > progress. As result, > {{org.apache.qpid.client.AMQSession_0_10#_currentException}} can have null > value when method {{org.apache.qpid.client.AMQConnection#exceptionReceived}} > is invoked from > {{org.apache.qpid.client.AMQSession_0_10#setCurrentException}}. "{{null}} > cause" is interpreted as "hard error" causing to close other sessions and > connection from IoReceiver thread. Whilst closing session or connection, the > client waits for the broker responses, however, it cannot get them as > IoReceiver thread is blocked. Wen should not wait for any broker responses in > IoReceiver thread. > Thus, we have 2 issues here: > * {{org.apache.qpid.client.AMQSession_0_10#_currentException}} should not be > referenced without a synchronization lock > * the client should not wait for broker responses in IoReceiver thread (i.e. > session or connection close should not be performed in IoReceiver thread) -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org