[jboss-cvs] JBossAS SVN: r83826 - 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 Feb 3 14:33:20 EST 2009


Author: adrian at jboss.org
Date: 2009-02-03 14:33:20 -0500 (Tue, 03 Feb 2009)
New Revision: 83826

Modified:
   projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
   projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java
Log:
[JBCL-81] - Don't reassign tasks unless we have finished the full classloading task as per JBoss4 code

Modified: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java	2009-02-03 19:15:42 UTC (rev 83825)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java	2009-02-03 19:33:20 UTC (rev 83826)
@@ -776,7 +776,7 @@
       }
       finally
       {
-         unlock(trace);
+         unlock(trace, true);
       }
    }
 
@@ -925,10 +925,12 @@
 
    /**
     * Unlock
+    * 
+    * @param rescheduleTasks whether to reschedule tasks
     */
-   void unlock()
+   void unlock(boolean rescheduleTasks)
    {
-      unlock(log.isTraceEnabled());
+      unlock(log.isTraceEnabled(), rescheduleTasks);
    }
 
    /**
@@ -1032,8 +1034,9 @@
     * Unlock
     * 
     * @param trace whether trace is enabled
+    * @param rescheduleTasks whether to reschedule tasks
     */
-   private void unlock(boolean trace)
+   private void unlock(boolean trace, boolean rescheduleTasks)
    {
       Thread thread = Thread.currentThread();
       if (trace)
@@ -1045,7 +1048,7 @@
       
          if (lock.getHoldCount() == 0)
          {
-            ClassLoaderManager.unregisterLoaderThread(this, thread);
+            ClassLoaderManager.unregisterLoaderThread(this, thread, rescheduleTasks);
             notifyAll();
          }
       }

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-02-03 19:15:42 UTC (rev 83825)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java	2009-02-03 19:33:20 UTC (rev 83826)
@@ -90,12 +90,13 @@
     * 
     * @param classLoader the classloader
     * @param thread the thread owning the classloader
+    * @param rescheduleTasks whether to reschedule tasks
     */
-   public static void unregisterLoaderThread(BaseClassLoader classLoader, Thread thread)
+   public static void unregisterLoaderThread(BaseClassLoader classLoader, Thread thread, boolean rescheduleTasks)
    {
       boolean trace = log.isTraceEnabled();
       if (trace)
-         log.trace("unregisterLoaderThread, classloader=" + classLoader + " thread=" + thread);
+         log.trace("unregisterLoaderThread, classloader=" + classLoader + " thread=" + thread + " rescheduleTasks=" + rescheduleTasks);
 
       // Unregister as the owning thread and notify any waiting threads
       synchronized (loadClassThreads)
@@ -105,26 +106,29 @@
       }
 
       // Any ThreadTasks associated with this thread must be reassigned
-      List<ThreadTask> taskList = loadTasksByThread.get(thread);
-      if (taskList != null)
+      if (rescheduleTasks)
       {
-         synchronized (taskList)
+         List<ThreadTask> taskList = loadTasksByThread.get(thread);
+         if (taskList != null)
          {
-            while (taskList.isEmpty() == false)
+            synchronized (taskList)
             {
-               ThreadTask threadTask = taskList.remove(0);
-               ClassLoadingTask loadTask = threadTask.getLoadTask();
-               Thread requestingThread = loadTask.getRequestingThread();
-               if( trace )
-                  log.trace("Reassigning task: " + threadTask+" to " + requestingThread);
-               threadTask.setThread(null);
-               // Insert the task into the front of requestingThread task list
-               List<ThreadTask> toTaskList = loadTasksByThread.get(requestingThread);
-               synchronized (toTaskList)
+               while (taskList.isEmpty() == false)
                {
-                  toTaskList.add(0, threadTask);
-                  loadTask.nextEvent();
-                  toTaskList.notify();
+                  ThreadTask threadTask = taskList.remove(0);
+                  ClassLoadingTask loadTask = threadTask.getLoadTask();
+                  Thread requestingThread = loadTask.getRequestingThread();
+                  if( trace )
+                     log.trace("Reassigning task: " + threadTask+" to " + requestingThread);
+                  threadTask.setThread(null);
+                  // Insert the task into the front of requestingThread task list
+                  List<ThreadTask> toTaskList = loadTasksByThread.get(requestingThread);
+                  synchronized (toTaskList)
+                  {
+                     toTaskList.add(0, threadTask);
+                     loadTask.nextEvent();
+                     toTaskList.notify();
+                  }
                }
             }
          }
@@ -286,7 +290,7 @@
       {
          // Release any lock on the classloader
          if (threadTask.isReleaseInNextTask())
-            threadTask.getClassLoader().unlock();
+            threadTask.getClassLoader().unlock(false);
       }
 
       // If the ThreadTasks are complete mark the ClassLoadingTask finished




More information about the jboss-cvs-commits mailing list