You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/08/24 23:42:53 UTC

svn commit: r988734 - /pivot/trunk/core/src/org/apache/pivot/beans/NamespaceBinding.java

Author: gbrown
Date: Tue Aug 24 21:42:53 2010
New Revision: 988734

URL: http://svn.apache.org/viewvc?rev=988734&view=rev
Log:
Avoid potential infinite loops with circular namespace binding references.

Modified:
    pivot/trunk/core/src/org/apache/pivot/beans/NamespaceBinding.java

Modified: pivot/trunk/core/src/org/apache/pivot/beans/NamespaceBinding.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/beans/NamespaceBinding.java?rev=988734&r1=988733&r2=988734&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/beans/NamespaceBinding.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/beans/NamespaceBinding.java Tue Aug 24 21:42:53 2010
@@ -40,11 +40,16 @@ public class NamespaceBinding {
     private Dictionary<String, Object> targetDictionary;
     private String targetKey;
 
+    private boolean updating = false;
+
     private MapListener<String, Object> sourceMapListener = new MapListener.Adapter<String, Object>() {
         @Override
         public void valueUpdated(Map<String, Object> map, String key, Object previousValue) {
-            if (key.equals(sourceKey)) {
+            if (key.equals(sourceKey)
+                && !updating) {
+                updating = true;
                 targetDictionary.put(targetKey, sourceMap.get(sourceKey));
+                updating = false;
             }
         }
     };
@@ -52,8 +57,11 @@ public class NamespaceBinding {
     private PropertyChangeListener sourcePropertyChangeListener = new PropertyChangeListener() {
         @Override
         public void propertyChanged(Object bean, String propertyName) {
-            if (propertyName.equals(sourceKey)) {
+            if (propertyName.equals(sourceKey)
+                && !updating) {
+                updating = true;
                 targetDictionary.put(targetKey, sourceMap.get(sourceKey));
+                updating = false;
             }
         }
     };