[ 
https://issues.apache.org/jira/browse/JAMES-900?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Norman Maurer resolved JAMES-900.
---------------------------------

    Resolution: Fixed
      Assignee: Norman Maurer

fixed

> Possible race-condition in MimeMessageCopyOnWriteProxy
> ------------------------------------------------------
>
>                 Key: JAMES-900
>                 URL: https://issues.apache.org/jira/browse/JAMES-900
>             Project: JAMES Server
>          Issue Type: Bug
>          Components: SpoolManager & Processors
>    Affects Versions: 2.3.1, 2.3.2, 3.0-M1
>         Environment: Windows XP, Sun JDK 1.6.0_12, MySQL 5.0 backend
>            Reporter: Amichai Rothman
>            Assignee: Norman Maurer
>             Fix For: 3.0-M2
>
>
> The exception below occurs 1-2 times a day on a server handling between a few 
> hundred and a few thousands of messages per day.
> I took a short look at the code, and it looks like there's a 
> MimeMessageCopyOnWriteProxy wrapping a null message. A few possible causes:
> - MessageReferenceTracker.getWrapped() should be synchronized, as the field 
> is neither final nor volatile and so it's possible that a thread other than 
> the one which creates it will see a null wrapped message.
> - the refCount field is not properly synchronized nor volatile so methods 
> which set/replace its value (private constructor, 
> getWrappedMessageForWriting) may cause some threads to see the new instance 
> and some the old one. this can result in buggy reference counting, which can 
> result in the wrapped message being set to null (when reference count is 
> decreased too much) and then being accessed.
> - a MailImpl is being constructed (or copy-constructed) somewhere with a null 
> message (which is passed on to the proxy class).
> - something completely different.
> The stacktrace from spoolmanager log:
> 25/04/09 02:00:58 ERROR spoolmanager.transport: Exception calling 
> LocalDelivery: Exception spooling message: Exception caught while storing 
> mail Container: 
> javax.mail.MessagingException: Exception spooling message: Exception caught 
> while storing mail Container: ;
>   nested exception is:
>       javax.mail.MessagingException: Exception caught while storing mail 
> Container: ;
>   nested exception is:
>       java.lang.NullPointerException
>       at org.apache.james.James.sendMail(James.java:501)
>       at org.apache.james.James.sendMail(James.java:454)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at 
> org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
>       at $Proxy9.sendMail(Unknown Source)
>       at 
> org.apache.james.transport.mailets.ToMultiRepository.service(ToMultiRepository.java:183)
>       at 
> org.apache.james.transport.mailets.LocalDelivery.service(LocalDelivery.java:66)
>       at 
> org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:424)
>       at 
> org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405)
>       at 
> org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309)
>       at java.lang.Thread.run(Unknown Source)
> Caused by: javax.mail.MessagingException: Exception caught while storing mail 
> Container: ;
>   nested exception is:
>       java.lang.NullPointerException
>       at 
> org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:764)
>       at 
> org.apache.james.mailrepository.JDBCSpoolRepository.store(JDBCSpoolRepository.java:240)
>       at 
> org.apache.james.mailrepository.MailStoreSpoolRepository.store(MailStoreSpoolRepository.java:126)
>       at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at 
> org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
>       at $Proxy5.store(Unknown Source)
>       at org.apache.james.James.sendMail(James.java:493)
>       ... 13 more
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.james.core.MimeMessageUtil.calculateMessageSize(MimeMessageUtil.java:277)
>       at 
> org.apache.james.core.MimeMessageUtil.getMessageSize(MimeMessageUtil.java:261)
>       at 
> org.apache.james.core.MimeMessageCopyOnWriteProxy.getMessageSize(MimeMessageCopyOnWriteProxy.java:745)
>       at 
> org.apache.james.core.MimeMessageUtil.getMessageSize(MimeMessageUtil.java:257)
>       at org.apache.james.core.MailImpl.getMessageSize(MailImpl.java:372)
>       at 
> org.apache.james.mailrepository.MessageInputStream.<init>(MessageInputStream.java:53)
>       at 
> org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:718)
>       ... 21 more
> javax.mail.MessagingException: Exception caught while storing mail Container: 
> ;
>   nested exception is:
>       java.lang.NullPointerException
>       at 
> org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:764)
>       at 
> org.apache.james.mailrepository.JDBCSpoolRepository.store(JDBCSpoolRepository.java:240)
>       at 
> org.apache.james.mailrepository.MailStoreSpoolRepository.store(MailStoreSpoolRepository.java:126)
>       at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at 
> org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
>       at $Proxy5.store(Unknown Source)
>       at org.apache.james.James.sendMail(James.java:493)
>       at org.apache.james.James.sendMail(James.java:454)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at 
> org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
>       at $Proxy9.sendMail(Unknown Source)
>       at 
> org.apache.james.transport.mailets.ToMultiRepository.service(ToMultiRepository.java:183)
>       at 
> org.apache.james.transport.mailets.LocalDelivery.service(LocalDelivery.java:66)
>       at 
> org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:424)
>       at 
> org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405)
>       at 
> org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309)
>       at java.lang.Thread.run(Unknown Source)
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.james.core.MimeMessageUtil.calculateMessageSize(MimeMessageUtil.java:277)
>       at 
> org.apache.james.core.MimeMessageUtil.getMessageSize(MimeMessageUtil.java:261)
>       at 
> org.apache.james.core.MimeMessageCopyOnWriteProxy.getMessageSize(MimeMessageCopyOnWriteProxy.java:745)
>       at 
> org.apache.james.core.MimeMessageUtil.getMessageSize(MimeMessageUtil.java:257)
>       at org.apache.james.core.MailImpl.getMessageSize(MailImpl.java:372)
>       at 
> org.apache.james.mailrepository.MessageInputStream.<init>(MessageInputStream.java:53)
>       at 
> org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:718)
>       ... 21 more
> java.lang.NullPointerException
>       at 
> org.apache.james.core.MimeMessageUtil.calculateMessageSize(MimeMessageUtil.java:277)
>       at 
> org.apache.james.core.MimeMessageUtil.getMessageSize(MimeMessageUtil.java:261)
>       at 
> org.apache.james.core.MimeMessageCopyOnWriteProxy.getMessageSize(MimeMessageCopyOnWriteProxy.java:745)
>       at 
> org.apache.james.core.MimeMessageUtil.getMessageSize(MimeMessageUtil.java:257)
>       at org.apache.james.core.MailImpl.getMessageSize(MailImpl.java:372)
>       at 
> org.apache.james.mailrepository.MessageInputStream.<init>(MessageInputStream.java:53)
>       at 
> org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:718)
>       at 
> org.apache.james.mailrepository.JDBCSpoolRepository.store(JDBCSpoolRepository.java:240)
>       at 
> org.apache.james.mailrepository.MailStoreSpoolRepository.store(MailStoreSpoolRepository.java:126)
>       at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at 
> org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
>       at $Proxy5.store(Unknown Source)
>       at org.apache.james.James.sendMail(James.java:493)
>       at org.apache.james.James.sendMail(James.java:454)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at 
> org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
>       at $Proxy9.sendMail(Unknown Source)
>       at 
> org.apache.james.transport.mailets.ToMultiRepository.service(ToMultiRepository.java:183)
>       at 
> org.apache.james.transport.mailets.LocalDelivery.service(LocalDelivery.java:66)
>       at 
> org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:424)
>       at 
> org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405)
>       at 
> org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309)
>       at java.lang.Thread.run(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to