You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Enrico Musuruana (JIRA)" <ji...@apache.org> on 2014/05/22 11:26:01 UTC

[jira] [Created] (AMQ-5198) MessageConsumer and Producer are not thread safe

Enrico Musuruana created AMQ-5198:
-------------------------------------

             Summary: MessageConsumer and Producer are not thread safe
                 Key: AMQ-5198
                 URL: https://issues.apache.org/jira/browse/AMQ-5198
             Project: ActiveMQ
          Issue Type: Bug
    Affects Versions: 5.9.0
            Reporter: Enrico Musuruana


We currently have an object that acts both as a consumer and as a producer over the same queue.

Lazy initialization of the scheduler is not 100% thread safe when a consumer and a producer are created sharing the same connection.


We encountered the following sporadic NPE when a rollback() is invoked:
Caused by: java.lang.NullPointerException
        at org.apache.activemq.thread.Scheduler.executeAfterDelay(Scheduler.java:64)
        at org.apache.activemq.ActiveMQMessageConsumer.rollback(ActiveMQMessageConsumer.java:1278)
        at org.apache.activemq.ActiveMQMessageConsumer$5.afterRollback(ActiveMQMessageConsumer.java:1054)
        at org.apache.activemq.TransactionContext.afterRollback(TransactionContext.java:157)
        ... 11 more



We believe that the lazy initialized getScheduler() is open for a race condition when a publish and rollback are happening concurrently.

try {
                        result = scheduler = new Scheduler("ActiveMQConnection["+info.getConnectionId().getValue()+"] Scheduler");
                        scheduler.start();
                    } catch(Exception e) {
                        throw JMSExceptionSupport.create(e);
                    }

The suggested fix is to simply invoke the start within the constructor of the Scheduler class.



--
This message was sent by Atlassian JIRA
(v6.2#6252)