You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/05/05 12:00:38 UTC

svn commit: r535488 - /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java

Author: aadamchik
Date: Sat May  5 03:00:37 2007
New Revision: 535488

URL: http://svn.apache.org/viewvc?view=rev&rev=535488
Log:
CAY-786 - Race condition in DataContext.localObject()
found a similar race condition in CayenneContext.createFault

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java?view=diff&rev=535488&r1=535487&r2=535488
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/CayenneContext.java Sat May  5 03:00:37 2007
@@ -484,13 +484,16 @@
         ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
                 id.getEntityName());
 
-        Persistent object = (Persistent) descriptor.createObject();
+        Persistent object;
+        synchronized (graphManager) {
+            object = (Persistent) descriptor.createObject();
 
-        object.setPersistenceState(PersistenceState.HOLLOW);
-        object.setObjectContext(this);
-        object.setObjectId(id);
+            object.setPersistenceState(PersistenceState.HOLLOW);
+            object.setObjectContext(this);
+            object.setObjectId(id);
 
-        graphManager.registerNode(id, object);
+            graphManager.registerNode(id, object);
+        }
 
         return object;
     }