Author: scabanovich
Date: 2009-03-17 13:56:36 -0400 (Tue, 17 Mar 2009)
New Revision: 14243
Modified:
branches/jbosstools-3.0.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java
Log:
JBIDE-3904
Modified:
branches/jbosstools-3.0.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java
===================================================================
---
branches/jbosstools-3.0.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java 2009-03-17
17:53:01 UTC (rev 14242)
+++
branches/jbosstools-3.0.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java 2009-03-17
17:56:36 UTC (rev 14243)
@@ -247,7 +247,11 @@
public void put(String key, XModelObject value) {
entries.put(key, value);
- cache = null;
+ if(cache != null) {
+ synchronized(this) {
+ cache = null;
+ }
+ }
}
/**
@@ -269,7 +273,10 @@
* @return
*/
public XModelObject[] getSortedValues(Comparator<XModelObject> comparator) {
- if (cache != null) return cache;
+ XModelObject[] c = cache;
+ //Otherwise, cache can be made null between 'if' and 'return', but we
+ //avoid synchronizing this line for the most probable return to be very fast.
+ if (c != null) return c;
synchronized (this) {
if (cache != null) return cache;
if (size() == 0) {
@@ -279,13 +286,17 @@
if (comparator != null)
Arrays.sort(cache, comparator);
}
+ return cache;
}
- return cache;
}
public void remove(String key) {
entries.remove(key);
- cache = null;
+ if(cache != null) {
+ synchronized(this) {
+ cache = null;
+ }
+ }
}
/**
Show replies by date