Benoit Tellier created JAMES-3177:
-------------------------------------

             Summary: NPE upon SelectedMailboxImpl event processing
                 Key: JAMES-3177
                 URL: https://issues.apache.org/jira/browse/JAMES-3177
             Project: James Server
          Issue Type: Improvement
          Components: IMAPServer
            Reporter: Benoit Tellier


We noticed the following exception:


{code:java}
        java.lang.NullPointerException: null
        at 
org.apache.james.imap.processor.base.SelectedMailboxImpl.mailboxEvent(SelectedMailboxImpl.java:363)
        at 
org.apache.james.imap.processor.base.SelectedMailboxImpl.event(SelectedMailboxImpl.java:308)
        at 
org.apache.james.mailbox.events.MailboxListenerExecutor.execute(MailboxListenerExecutor.java:42)
        at 
org.apache.james.mailbox.events.EventDispatcher.lambda$executeListener$6(EventDispatcher.java:105)
        at 
reactor.core.publisher.MonoFromPublisher.subscribe(MonoFromPublisher.java:55)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4087)
        at 
reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:124)
        at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
        at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
{code}

In order not to miss updates, SelectedMailboxImpl starts processing events 
before have completed it's initialization. Thus, if a concurrent mailbox 
operation happens, the `event` method can be executed before the 
applicableFlags variable is initialized. Leading to the above null pointer 
exception.

We should rely on indempoteance of the add only set (applicableFlags) to keep 
track of applicable flags changes during the initialization. Merging them with 
the one being stored ensures the data is up to date.




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

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to