You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Andy DeMaurice (Jira)" <ji...@apache.org> on 2021/08/17 14:57:00 UTC

[jira] [Created] (AMQNET-727) Thread sync error with MessageConsumer.pendingAck

Andy DeMaurice created AMQNET-727:
-------------------------------------

             Summary: Thread sync error with MessageConsumer.pendingAck
                 Key: AMQNET-727
                 URL: https://issues.apache.org/jira/browse/AMQNET-727
             Project: ActiveMQ .Net
          Issue Type: Bug
          Components: OpenWire
    Affects Versions: 1.8.0
            Reporter: Andy DeMaurice


pendingAck is accessed by multiple threads; in most places where it is written, it is done along with accessing *deliveredMessages*, so it is written within a *lock(this.deliveredMessages)* block.

However, this call stack shows where pendingAck gets assigned to a new MessageAck object, NOT within the lock... and it is subject to being overwritten by another thread (usually the other thread is in MessageConsumer.Acknowledge() :

 

Apache.NMS.ActiveMQ.MessageConsumer.AckLater(Apache.NMS.ActiveMQ.Commands.MessageDispatch, Apache.NMS.ActiveMQ.AckType)
Apache.NMS.ActiveMQ.MessageConsumer.AfterMessageIsConsumed(Apache.NMS.ActiveMQ.Commands.MessageDispatch, Boolean)
Apache.NMS.ActiveMQ.MessageConsumer.Dispatch(Apache.NMS.ActiveMQ.Commands.MessageDispatch)
Apache.NMS.ActiveMQ.SessionExecutor.Dispatch(Apache.NMS.ActiveMQ.Commands.MessageDispatch)
Apache.NMS.ActiveMQ.SessionExecutor.Iterate()
Apache.NMS.ActiveMQ.Threads.DedicatedTaskRunner.Run()

 

The usual symptom I see is a NullReferenceException in this section of code within AckLater; because pendingAck has been set to null by another thread:

 

if(oldPendingAck == null)
 {
   pendingAck.FirstMessageId = pendingAck.LastMessageId;
 }
 else if(oldPendingAck.AckType == pendingAck.AckType)
 {
   pendingAck.FirstMessageId = oldPendingAck.FirstMessageId;
 }



--
This message was sent by Atlassian Jira
(v8.3.4#803005)