changeset 6419:15b2bb6fd673

Merge
author anoll
date Tue, 06 May 2014 08:01:14 +0000
parents 446bb44e5367 6786f914240e
children 9433721e2340
files
diffstat 1 files changed, 18 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/compiler/compileBroker.cpp	Tue May 06 09:17:57 2014 +0200
+++ b/src/share/vm/compiler/compileBroker.cpp	Tue May 06 08:01:14 2014 +0000
@@ -625,17 +625,27 @@
   lock()->notify_all();
 }
 
+/**
+ * Empties compilation queue by putting all compilation tasks onto
+ * a freelist. Furthermore, the method wakes up all threads that are
+ * waiting on a compilation task to finish. This can happen if background
+ * compilation is disabled.
+ */
 void CompileQueue::free_all() {
   MutexLocker mu(lock());
-  if (_first != NULL) {
-    for (CompileTask* task = _first; task != NULL; task = task->next()) {
-      // Wake up thread that blocks on the compile task.
-      task->lock()->notify();
-      // Puts task back on the freelist.
-      CompileTask::free(task);
-    }
-    _first = NULL;
+  CompileTask* next = _first;
+
+  // Iterate over all tasks in the compile queue
+  while (next != NULL) {
+    CompileTask* current = next;
+    next = current->next();
+    // Wake up thread that blocks on the compile task.
+    current->lock()->notify();
+    // Put the task back on the freelist.
+    CompileTask::free(current);
   }
+  _first = NULL;
+
   // Wake up all threads that block on the queue.
   lock()->notify_all();
 }