[jboss-cvs] JBossAS SVN: r67724 - trunk/jmx/src/main/org/jboss/mx/loading.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sun Dec 2 00:53:22 EST 2007
Author: scott.stark at jboss.org
Date: 2007-12-02 00:53:22 -0500 (Sun, 02 Dec 2007)
New Revision: 67724
Modified:
trunk/jmx/src/main/org/jboss/mx/loading/UnifiedLoaderRepository3.java
Log:
Further guard against ConcurrentModificationException when class loaders are being removed.
Modified: trunk/jmx/src/main/org/jboss/mx/loading/UnifiedLoaderRepository3.java
===================================================================
--- trunk/jmx/src/main/org/jboss/mx/loading/UnifiedLoaderRepository3.java 2007-12-01 22:24:38 UTC (rev 67723)
+++ trunk/jmx/src/main/org/jboss/mx/loading/UnifiedLoaderRepository3.java 2007-12-02 05:53:22 UTC (rev 67724)
@@ -248,8 +248,10 @@
Set pkgSet = (Set) packagesMap.get(pkgName);
if (dynamicClassLoaders.size() > 0)
{
- if (pkgSet == null)
- pkgSet = ClassLoaderUtils.newPackageSet();
+ Set<RepositoryClassLoader> newSet = ClassLoaderUtils.newPackageSet();
+ if(pkgSet != null)
+ newSet.addAll(pkgSet);
+ pkgSet = newSet;
pkgSet.addAll(dynamicClassLoaders);
}
return pkgSet;
@@ -936,7 +938,12 @@
Set pkgSet = (Set) packagesMap.get(pkgName);
if (pkgSet != null)
{
+ Set<RepositoryClassLoader> newSet = ClassLoaderUtils.newPackageSet();
+ newSet.addAll(pkgSet);
+ pkgSet = newSet;
+
pkgSet.remove(cl);
+ packagesMap.put(pkgName, newSet);
if (pkgSet.isEmpty())
packagesMap.remove(pkgName);
}
@@ -951,7 +958,13 @@
{
Map.Entry entry = (Map.Entry) i.next();
Set pkgSet = (Set) entry.getValue();
- pkgSet.remove(cl);
+ if(pkgSet.contains(cl) && pkgSet.size() > 1)
+ {
+ Set<RepositoryClassLoader> newSet = ClassLoaderUtils.newPackageSet();
+ newSet.addAll(pkgSet);
+ newSet.remove(cl);
+ packagesMap.put(entry.getKey(), newSet);
+ }
if (pkgSet.isEmpty())
i.remove();
}
@@ -1138,10 +1151,10 @@
// Make a copy of the pkgSet to avoid concurrent mods
Set<RepositoryClassLoader> newSet = ClassLoaderUtils.newPackageSet();
newSet.addAll(pkgSet);
- packagesMap.put(pkgName, newSet);
pkgSet = newSet;
// Add the class loader
pkgSet.add((RepositoryClassLoader)loader);
+ packagesMap.put(pkgName, newSet);
List<String> loaderPkgNames = loaderToPackagesMap.get(loader);
if( loaderPkgNames == null )
{
More information about the jboss-cvs-commits
mailing list