Mercurial > hg > graal-compiler
comparison src/share/vm/compiler/compileBroker.cpp @ 20590:c47fcf523fff
8042428: CompileQueue::free_all() code is incorrect
Summary: Free task after getting next pointer of freelist.
Reviewed-by: kvn, adlertz
author | anoll |
---|---|
date | Tue, 06 May 2014 09:52:38 +0200 |
parents | 0c0e68524c17 |
children | 28051f14c328 |
comparison
equal
deleted
inserted
replaced
20589:0c0e68524c17 | 20590:c47fcf523fff |
---|---|
662 | 662 |
663 // Notify CompilerThreads that a task is available. | 663 // Notify CompilerThreads that a task is available. |
664 lock()->notify_all(); | 664 lock()->notify_all(); |
665 } | 665 } |
666 | 666 |
667 /** | |
668 * Empties compilation queue by putting all compilation tasks onto | |
669 * a freelist. Furthermore, the method wakes up all threads that are | |
670 * waiting on a compilation task to finish. This can happen if background | |
671 * compilation is disabled. | |
672 */ | |
667 void CompileQueue::free_all() { | 673 void CompileQueue::free_all() { |
668 MutexLocker mu(lock()); | 674 MutexLocker mu(lock()); |
669 if (_first != NULL) { | 675 CompileTask* next = _first; |
670 for (CompileTask* task = _first; task != NULL; task = task->next()) { | 676 |
671 // Wake up thread that blocks on the compile task. | 677 // Iterate over all tasks in the compile queue |
672 task->lock()->notify(); | 678 while (next != NULL) { |
673 // Puts task back on the freelist. | 679 CompileTask* current = next; |
674 CompileTask::free(task); | 680 next = current->next(); |
675 } | 681 // Wake up thread that blocks on the compile task. |
676 _first = NULL; | 682 current->lock()->notify(); |
677 } | 683 // Put the task back on the freelist. |
684 CompileTask::free(current); | |
685 } | |
686 _first = NULL; | |
687 | |
678 // Wake up all threads that block on the queue. | 688 // Wake up all threads that block on the queue. |
679 lock()->notify_all(); | 689 lock()->notify_all(); |
680 } | 690 } |
681 | 691 |
682 // ------------------------------------------------------------------ | 692 // ------------------------------------------------------------------ |