[ 
https://issues.apache.org/jira/browse/QPID-8212?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Rudyy updated QPID-8212:
-----------------------------
    Description: 
When method {{MessageConsumer#close()}} is invoked in one thread and method 
{{Connection#close()}} is invoked in another thread, the incoming 
{{BasicCancelOk}} frame can be ignored due to {{true}} being returned from 
{{Session#isClosed()}}  because of {{Connection#_closed}} flag being set to 
true on connection close. As result, the call to {{MessageConsumer#close()}} 
can block for 60 seconds and end up in exception due to not being able to 
receive {{BasicCancelOk}}. Invocation of {{Connection#close()}} also gets 
blocked as message delivery lock being hold on consumer close.

The defect was introduced as part of changes made against QPID-8185 in commit 
 
[f89f6c2f45d11fc63551d0d61c17eceedd6bd247|https://git-wip-us.apache.org/repos/asf?p=qpid-jms-amqp-0-x.git;h=f89f6c2]

Method {{AMQProtocolSession#isClosedForInput}} checks whether session is closed 
for input by calling {{AMQSession#isClosed()}}. The latter returns true when 
either {{AMQSession#_closed}} or {{AMQConnection#_closed}} holds {{true}}. Only 
{{AMQSession#_closed}} should be checked in 
{{AMQProtocolSession#isClosedForInput}}.

  was:
When method {{MessageConsumer#close()}} is invoked in one thread and method 
{{Connection#close()}} is invoked in another thread, the incoming 
{{BasicCancelOk}} frame can be ignored due to {{Connection#_closed}} flag being 
set. As result, the call  to {{MessageConsumer#close()}} can block for 60 
seconds and end up in exception due to not being able to receive 
{{BasicCancelOk}}. Invocation of {{Connection#close()}}  also gets blocked due 
to message delivery lock being hold on consumer close.

The defect was introduced as part of changes made against QPID-8185 in commit 
[f89f6c2f45d11fc63551d0d61c17eceedd6bd247|https://git-wip-us.apache.org/repos/asf?p=qpid-jms-amqp-0-x.git;h=f89f6c2]

Method {{AMQProtocolSession#isClosedForInput}} checks whether session is closed 
for input by calling {{AMQSession#isClosed()}}. The latter returns true when 
either {{AMQSession#_closed}} or {{AMQConnection#_closed}} holds  {{true}}.  
Only {{AMQSession#_closed}}  should be checked in 
{{AMQProtocolSession#isClosedForInput}}.


> [JMS AMQP 0-x][AMQP 0-8..0-91] Consumer close can block for 60 seconds and 
> endup in time-out exception
> ------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-8212
>                 URL: https://issues.apache.org/jira/browse/QPID-8212
>             Project: Qpid
>          Issue Type: Bug
>          Components: JMS AMQP 0-x
>    Affects Versions: qpid-java-client-0-x-6.3.1
>            Reporter: Alex Rudyy
>            Priority: Blocker
>             Fix For: qpid-java-client-0-x-6.3.2
>
>
> When method {{MessageConsumer#close()}} is invoked in one thread and method 
> {{Connection#close()}} is invoked in another thread, the incoming 
> {{BasicCancelOk}} frame can be ignored due to {{true}} being returned from 
> {{Session#isClosed()}}  because of {{Connection#_closed}} flag being set to 
> true on connection close. As result, the call to {{MessageConsumer#close()}} 
> can block for 60 seconds and end up in exception due to not being able to 
> receive {{BasicCancelOk}}. Invocation of {{Connection#close()}} also gets 
> blocked as message delivery lock being hold on consumer close.
> The defect was introduced as part of changes made against QPID-8185 in commit 
>  
> [f89f6c2f45d11fc63551d0d61c17eceedd6bd247|https://git-wip-us.apache.org/repos/asf?p=qpid-jms-amqp-0-x.git;h=f89f6c2]
> Method {{AMQProtocolSession#isClosedForInput}} checks whether session is 
> closed for input by calling {{AMQSession#isClosed()}}. The latter returns 
> true when either {{AMQSession#_closed}} or {{AMQConnection#_closed}} holds 
> {{true}}. Only {{AMQSession#_closed}} should be checked in 
> {{AMQProtocolSession#isClosedForInput}}.



--
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

Reply via email to