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)

Reply via email to