[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