You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Andrus Adamchik (JIRA)" <ji...@apache.org> on 2012/09/11 03:31:08 UTC

[jira] [Closed] (CAY-957) Deadlock in nested contexts

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

Andrus Adamchik closed CAY-957.
-------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: Short term future)
                   3.2M1
                   3.1B2
    
> Deadlock in nested contexts
> ---------------------------
>
>                 Key: CAY-957
>                 URL: https://issues.apache.org/jira/browse/CAY-957
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 1.2 branch, 2.0 branch, 3.0
>            Reporter: Andrus Adamchik
>            Assignee: Andrus Adamchik
>             Fix For: 3.1B2, 3.2M1
>
>         Attachments: 0001-CAY-957-Deadlock-in-nested-contexts.patch
>
>
> There is a deadlock condition when two peer nested contexts commit simultaneously. The test case (attached as a patch) deadlocks almost immediately with only two threads... 
> The old (pre CAY-1653 stack) :
> Name: UpdateThread-9684455
> State: BLOCKED on org.apache.cayenne.event.DispatchQueue@f899e9 owned by: UpdateThread-10872036
> Total blocked: 7  Total waited: 1
> Stack trace: 
> org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:54)
> org.apache.cayenne.event.EventManager.dispatchEvent(EventManager.java:348)
> org.apache.cayenne.event.EventManager.postEvent(EventManager.java:319)
> org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1457)
> org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:1121)
> org.apache.cayenne.access.DataContext.onSync(DataContext.java:1102)
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1160)
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1073)
> org.test.Main$UpdateThread.run(Main.java:66)
> Name: UpdateThread-10872036
> State: BLOCKED on org.apache.cayenne.access.ObjectStore@1b9b03 owned by: UpdateThread-9684455
> Total blocked: 9  Total waited: 0
> Stack trace: 
> org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:104)
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> java.lang.reflect.Method.invoke(Method.java:585)
> org.apache.cayenne.util.Invocation.fire(Invocation.java:204)
> org.apache.cayenne.event.EventManager$Dispatch.fire(EventManager.java:409)
> org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:162)
> org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:58)
> org.apache.cayenne.event.EventManager.dispatchEvent(EventManager.java:348)
> org.apache.cayenne.event.EventManager.postEvent(EventManager.java:319)
> org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1457)
> org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:1121)
> org.apache.cayenne.access.DataContext.onSync(DataContext.java:1102)
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1160)
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1073)
> org.test.Main$UpdateThread.run(Main.java:66)
> Newer stack is shown below in comments.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira