[ 
https://issues.apache.org/jira/browse/JCR-1148?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12532033
 ] 

Martijn Hendriks commented on JCR-1148:
---------------------------------------

Here are the stacktraces of two threads involved in the NPE:

The thread that throws the NPE (line information in ItemState has been changed 
due to debugging code):

Thread [Thread-38] (Suspended (breakpoint at line 158 in ItemState))    
        NodeState(ItemState).pull() line: 158   
        XAItemStateManager(LocalItemStateManager).stateModified(ItemState) 
line: 420    
        StateChangeDispatcher.notifyStateModified(ItemState) line: 85   
        SharedItemStateManager.stateModified(ItemState) line: 390       
        NodeState(ItemState).notifyStateUpdated() line: 244     
        ChangeLog.persisted() line: 271 
        SharedItemStateManager$Update.end() line: 702   
        SharedItemStateManager.update(ChangeLog, EventStateCollectionFactory) 
line: 855 
        XAItemStateManager(LocalItemStateManager).update(ChangeLog) line: 326   
        XAItemStateManager.update(ChangeLog) line: 313  
        XAItemStateManager(LocalItemStateManager).update() line: 302    
        SessionItemStateManager.update() line: 306      
        NodeImpl(ItemImpl).save() line: 1214    
        XASessionImpl(SessionImpl).save() line: 849     

The thread that just reset the overlayedState of the ItemState in the above 
thread to null:

        ItemState.disconnect(ItemState.java:209)
        ChangeLog.modified(ChangeLog.java:70)
        LocalItemStateManager.store(LocalItemStateManager.java:268)
        SessionItemStateManager.store(SessionItemStateManager.java:283)
        NodeImpl.makePersistent(NodeImpl.java:984)
        ItemImpl.persistTransientItems(ItemImpl.java:687)
        ItemImpl.save(ItemImpl.java:1198)
        SessionImpl.save(SessionImpl.java:849)

The problem is that saving causes a call to disconnect of an ItemState of the 
LocalItemStateManager, and that saving another session in another thread causes 
a call to pull of that ItemState through the SISM notification mechanism.

> NullPointerException in ItemState
> ---------------------------------
>
>                 Key: JCR-1148
>                 URL: https://issues.apache.org/jira/browse/JCR-1148
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: jackrabbit-core
>    Affects Versions: 1.3
>            Reporter: Martijn Hendriks
>
> The following happens quite regularly when multiple threads are adding, 
> retrieving and removing nodes simultaneously. Looking at the code of the pull 
> method, this seems due to under-synchronization somewhere as overlayedState 
> was tested at line 153 for null.
> java.lang.NullPointerException
>         at org.apache.jackrabbit.core.state.ItemState.pull(ItemState.java:156)
>         at 
> org.apache.jackrabbit.core.state.LocalItemStateManager.stateModified(LocalItemStateManager.java:421)
>         at 
> org.apache.jackrabbit.core.state.StateChangeDispatcher.notifyStateModified(StateChangeDispatcher.java:85)
>         at 
> org.apache.jackrabbit.core.state.SharedItemStateManager.stateModified(SharedItemStateManager.java:434)
>         at 
> org.apache.jackrabbit.core.state.ItemState.notifyStateUpdated(ItemState.java:241)
>         at 
> org.apache.jackrabbit.core.state.ChangeLog.persisted(ChangeLog.java:271)
>         at 
> org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:741)
>         at 
> org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:937)
>         at 
> org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:327)
>         at 
> org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:313)
>         at 
> org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:303)
>         at 
> org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:307)
>         at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1374)

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

Reply via email to