| Index: src/optimizing-compiler-thread.cc
|
| diff --git a/src/optimizing-compiler-thread.cc b/src/optimizing-compiler-thread.cc
|
| index b9ff7d83eca369c0b194ab2cd40ccdec5c9379be..21ef237107194d06a897110444c01710eae31bd0 100644
|
| --- a/src/optimizing-compiler-thread.cc
|
| +++ b/src/optimizing-compiler-thread.cc
|
| @@ -39,7 +39,9 @@ namespace internal {
|
|
|
| void OptimizingCompilerThread::Run() {
|
| #ifdef DEBUG
|
| - thread_id_ = ThreadId::Current().ToInteger();
|
| + { ScopedLock lock(thread_id_mutex_);
|
| + thread_id_ = ThreadId::Current().ToInteger();
|
| + }
|
| #endif
|
| Isolate::SetIsolateThreadLocals(isolate_, NULL);
|
| DisallowHeapAllocation no_allocation;
|
| @@ -113,8 +115,11 @@ void OptimizingCompilerThread::Stop() {
|
| InstallOptimizedFunctions();
|
| } else {
|
| OptimizingCompiler* optimizing_compiler;
|
| + // The optimizing compiler is allocated in the CompilationInfo's zone.
|
| while (input_queue_.Dequeue(&optimizing_compiler)) {
|
| - // The optimizing compiler is allocated in the CompilationInfo's zone.
|
| + delete optimizing_compiler->info();
|
| + }
|
| + while (output_queue_.Dequeue(&optimizing_compiler)) {
|
| delete optimizing_compiler->info();
|
| }
|
| }
|
| @@ -125,6 +130,8 @@ void OptimizingCompilerThread::Stop() {
|
| double percentage = (compile_time * 100) / total_time;
|
| PrintF(" ** Compiler thread did %.2f%% useful work\n", percentage);
|
| }
|
| +
|
| + Join();
|
| }
|
|
|
|
|
| @@ -156,6 +163,7 @@ void OptimizingCompilerThread::QueueForOptimization(
|
| #ifdef DEBUG
|
| bool OptimizingCompilerThread::IsOptimizerThread() {
|
| if (!FLAG_parallel_recompilation) return false;
|
| + ScopedLock lock(thread_id_mutex_);
|
| return ThreadId::Current().ToInteger() == thread_id_;
|
| }
|
| #endif
|
|
|