[jboss-cvs] JBossAS SVN: r83827 - projects/jboss-cl/trunk/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:30 EST 2009
Author: adrian at jboss.org
Date: 2009-02-03 14:33:30 -0500 (Tue, 03 Feb 2009)
New Revision: 83827
Modified:
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
projects/jboss-cl/trunk/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/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java 2009-02-03 19:33:20 UTC (rev 83826)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java 2009-02-03 19:33:30 UTC (rev 83827)
@@ -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/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java 2009-02-03 19:33:20 UTC (rev 83826)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderManager.java 2009-02-03 19:33:30 UTC (rev 83827)
@@ -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