- 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
This commit is contained in:
nor..67 2013-01-20 14:45:02 +00:00
parent 03f1060500
commit 8fef000fe9

View File

@ -121,34 +121,38 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
return; return;
} }
final T realValue = getSuperValue(); final T realValue = getSuperValue();
if ((objectLocal == null) && !inited) { mutex.readAccess(new Runnable() {
mutex.postWriteRequest(new Runnable() { public void run() {
public void run() { if ((objectLocal == null) && !inited) {
inited = true; mutex.postWriteRequest(new Runnable() {
objectLocal = duplicateObject(realValue); public void run() {
notifyListeners(PROP_INIT_CHANGE, null, objectLocal); inited = true;
logger.log(Level.FINE, "Got first sync duplicate for {0}", objectLocal); 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);
}
});
} }
}); }
} 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 @Override