[jbosscache-commits] JBoss Cache SVN: r7043 - core/trunk/src/main/java/org/jboss/cache.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Fri Oct 31 07:21:10 EDT 2008


Author: manik.surtani at 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




More information about the jbosscache-commits mailing list