src/share/vm/compiler/compileBroker.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/compiler/compileBroker.cpp	Tue May  6 09:05:47 2014
--- new/src/share/vm/compiler/compileBroker.cpp	Tue May  6 09:05:47 2014

*** 623,643 **** --- 623,653 ---- // Notify CompilerThreads that a task is available. 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()) { + 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. ! task->lock()->notify(); ! // Puts task back on the freelist. ! CompileTask::free(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(); } // ------------------------------------------------------------------

src/share/vm/compiler/compileBroker.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File