[jboss-cvs] JBossAS SVN: r93923 - projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Sep 22 08:09:43 EDT 2009
Author: adrian at jboss.org
Date: 2009-09-22 08:09:42 -0400 (Tue, 22 Sep 2009)
New Revision: 93923
Modified:
projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java
Log:
[JBCL-116] - Avoid potential infinite loop in ClassLoaderManager.unregisterLoaderThread()
Modified: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java 2009-09-22 12:09:04 UTC (rev 93922)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java 2009-09-22 12:09:42 UTC (rev 93923)
@@ -113,6 +113,7 @@
{
synchronized (taskList)
{
+ List<ThreadTask> ourselves = null;
while (taskList.isEmpty() == false)
{
ThreadTask threadTask = taskList.remove(0);
@@ -123,13 +124,28 @@
threadTask.setThread(null);
// Insert the task into the front of requestingThread task list
List<ThreadTask> toTaskList = loadTasksByThread.get(requestingThread);
- synchronized (toTaskList)
+ // Our we assigning to ourselves?
+ if (toTaskList == taskList)
{
- toTaskList.add(0, threadTask);
- loadTask.nextEvent();
- toTaskList.notify();
+ if (ourselves == null)
+ ourselves = new LinkedList<ThreadTask>();
+ ourselves.add(threadTask);
}
+ else
+ {
+ synchronized (toTaskList)
+ {
+ toTaskList.add(0, threadTask);
+ loadTask.nextEvent();
+ toTaskList.notify();
+ }
+ }
}
+ // Any assigned back to ourselves?
+ if (ourselves != null)
+ {
+ taskList.addAll(ourselves);
+ }
}
}
}
More information about the jboss-cvs-commits
mailing list