Sfoglia il codice sorgente

SDK:
- Use read mutex when checking SceneExplorerProperty value, not just write mutex when writing

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10115 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

nor..67 12 anni fa
parent
commit
eca25f2d04

+ 31 - 27
jme3-core/src/com/jme3/gde/core/properties/SceneExplorerProperty.java

@@ -121,34 +121,38 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
             return;
         }
         final T realValue = getSuperValue();
-        if ((objectLocal == null) && !inited) {
-            mutex.postWriteRequest(new Runnable() {
-                public void run() {
-                    inited = true;
-                    objectLocal = duplicateObject(realValue);
-                    notifyListeners(PROP_INIT_CHANGE, null, objectLocal);
-                    logger.log(Level.FINE, "Got first sync duplicate for {0}", objectLocal);
-                }
-            });
-        } else if ((objectLocal != null) && !objectLocal.equals(realValue)) {
-            mutex.postWriteRequest(new Runnable() {
-                public void run() {
-                    T oldObject = objectLocal;
-                    T newObject = duplicateObject(realValue);
-                    objectLocal = newObject;
-                    notifyListeners(PROP_SCENE_CHANGE, oldObject, objectLocal);
-                    logger.log(Level.FINE, "Got update for {0} due to equals check", objectLocal);
-                }
-            });
-        } else if ((objectLocal == null) && (realValue != null)) {
-            mutex.postWriteRequest(new Runnable() {
-                public void run() {
-                    objectLocal = duplicateObject(realValue);
-                    notifyListeners(PROP_SCENE_CHANGE, null, objectLocal);
-                    logger.log(Level.FINE, "Got update for {0} due to change from null", objectLocal);
+        mutex.readAccess(new Runnable() {
+            public void run() {
+                if ((objectLocal == null) && !inited) {
+                    mutex.postWriteRequest(new Runnable() {
+                        public void run() {
+                            inited = true;
+                            objectLocal = duplicateObject(realValue);
+                            notifyListeners(PROP_INIT_CHANGE, null, objectLocal);
+                            logger.log(Level.FINE, "Got first sync duplicate for {0}", objectLocal);
+                        }
+                    });
+                } else if ((objectLocal != null) && !objectLocal.equals(realValue)) {
+                    mutex.postWriteRequest(new Runnable() {
+                        public void run() {
+                            T oldObject = objectLocal;
+                            T newObject = duplicateObject(realValue);
+                            objectLocal = newObject;
+                            notifyListeners(PROP_SCENE_CHANGE, oldObject, objectLocal);
+                            logger.log(Level.FINE, "Got update for {0} due to equals check", objectLocal);
+                        }
+                    });
+                } else if ((objectLocal == null) && (realValue != null)) {
+                    mutex.postWriteRequest(new Runnable() {
+                        public void run() {
+                            objectLocal = duplicateObject(realValue);
+                            notifyListeners(PROP_SCENE_CHANGE, null, objectLocal);
+                            logger.log(Level.FINE, "Got update for {0} due to change from null", objectLocal);
+                        }
+                    });
                 }
-            });
-        }
+            }
+        });
     }
 
     @Override