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 |