Author: manik.surtani(a)jboss.com
Date: 2008-10-31 07:21:10 -0400 (Fri, 31 Oct 2008)
New Revision: 7043
Modified:
core/trunk/src/main/java/org/jboss/cache/RegionImpl.java
core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java
Log:
Better concurrent creation of regions and initialization of region eviction queues
Modified: core/trunk/src/main/java/org/jboss/cache/RegionImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RegionImpl.java 2008-10-31 04:22:58 UTC (rev
7042)
+++ core/trunk/src/main/java/org/jboss/cache/RegionImpl.java 2008-10-31 11:21:10 UTC (rev
7043)
@@ -50,7 +50,7 @@
private Fqn fqn;
private Status status;
private ClassLoader classLoader;
- private BlockingQueue<EvictionEvent> evictionEventQueue = null;
+ private volatile BlockingQueue<EvictionEvent> evictionEventQueue = null;
private int capacityWarnThreshold = 0;
private EvictionRegionConfig evictionRegionConfig;
private EvictionAlgorithm evictionAlgorithm;
@@ -270,7 +270,10 @@
{
log.warn("Capacity warn threshold used in eviction is smaller than
1.");
}
- evictionEventQueue = new LinkedBlockingQueue<EvictionEvent>(size);
+ synchronized (this)
+ {
+ if (evictionEventQueue == null) evictionEventQueue = new
LinkedBlockingQueue<EvictionEvent>(size);
+ }
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java 2008-10-31 04:22:58
UTC (rev 7042)
+++ core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java 2008-10-31 11:21:10
UTC (rev 7043)
@@ -236,7 +236,10 @@
if (createIfAbsent)
{
Region r = new RegionImpl(fqnToUse, this);
- regionsRegistry.put(fqnToUse, r);
+
+ // could be created concurrently; so make sure we use appropriate methods on
regionsRegistry for this.
+ Region previous = regionsRegistry.putIfAbsent(fqnToUse, r);
+ if (previous != null) r = previous;
if (type == MARSHALLING)
{
// insert current class loader into region so at least it is recognised as a
marshalling region
Show replies by date