[ 
https://issues.apache.org/jira/browse/AMQ-5426?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15363201#comment-15363201
 ] 

Christopher L. Shannon commented on AMQ-5426:
---------------------------------------------

I reverted the original fix as there was still a bit of a race condition in 
that it was possible an ack could be blown away or missed if the timer task for 
batch ack dispatch executed while a message was received.

The new fix is a lot simpler because it leverages the already existing 
deliveredMessages lock to protect the pendingAck variable and will make sure 
that everything is consistent.  

> ActiveMQMessageConsumer could run into NPE due to concurrent access to 
> internal state
> -------------------------------------------------------------------------------------
>
>                 Key: AMQ-5426
>                 URL: https://issues.apache.org/jira/browse/AMQ-5426
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JMS client
>    Affects Versions: 5.8.0, 5.9.1, 5.10.0
>            Reporter: Michael Wong
>            Assignee: Christopher L. Shannon
>            Priority: Minor
>             Fix For: 5.14.0, 5.13.4
>
>         Attachments: AMQ5426Test.java
>
>
> ActiveMQMessageConsumer could run into NPE when the consumer is closing and a 
> message arrived at the same time.
> Here is the stacktrace:
> java.lang.NullPointerException
> at 
> org.apache.activemq.ActiveMQMessageConsumer.ackLater(ActiveMQMessageConsumer.java:979)
> at 
> org.apache.activemq.ActiveMQMessageConsumer.afterMessageIsConsumed(ActiveMQMessageConsumer.java:929)
> at 
> org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1323)
> at 
> org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
> at 
> org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
> at 
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129)
> at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to