Revision: 16740
Author:   [email protected]
Date:     Mon Sep 16 15:34:46 2013 UTC
Log:      Add mutex when accessing concurrent recompilation output queue.

Also small refactorings.

[email protected]
BUG=291236

Review URL: https://codereview.chromium.org/23902033
http://code.google.com/p/v8/source/detail?r=16740

Modified:
 /branches/bleeding_edge/src/execution.cc
 /branches/bleeding_edge/src/optimizing-compiler-thread.cc
 /branches/bleeding_edge/src/optimizing-compiler-thread.h

=======================================
--- /branches/bleeding_edge/src/execution.cc    Thu Sep 12 11:30:56 2013 UTC
+++ /branches/bleeding_edge/src/execution.cc    Mon Sep 16 15:34:46 2013 UTC
@@ -952,7 +952,7 @@
   }
   if (stack_guard->IsInstallCodeRequest()) {
     ASSERT(FLAG_concurrent_recompilation);
-    stack_guard->Continue(INSTALL_CODE);
+    isolate_->stack_guard()->Continue(INSTALL_CODE);
     isolate->optimizing_compiler_thread()->InstallOptimizedFunctions();
   }
   isolate->runtime_profiler()->OptimizeNow();
=======================================
--- /branches/bleeding_edge/src/optimizing-compiler-thread.cc Thu Sep 12 11:30:56 2013 UTC +++ /branches/bleeding_edge/src/optimizing-compiler-thread.cc Mon Sep 16 15:34:46 2013 UTC
@@ -74,7 +74,6 @@
         { AllowHandleDereference allow_handle_dereference;
           FlushInputQueue(true);
         }
-        Release_Store(&queue_length_, static_cast<AtomicWord>(0));
         Release_Store(&stop_thread_, static_cast<AtomicWord>(CONTINUE));
         stop_semaphore_.Signal();
         // Return to start of consumer loop.
@@ -114,6 +113,7 @@
     osr_candidates_.RemoveElement(optimizing_compiler);
     ready_for_osr_.Add(optimizing_compiler);
   } else {
+    LockGuard<Mutex> access_queue(&queue_mutex_);
     output_queue_.Enqueue(optimizing_compiler);
     isolate_->stack_guard()->RequestInstallCode();
   }
@@ -134,13 +134,20 @@
     }
     delete info;
   }
+  Release_Store(&queue_length_, static_cast<AtomicWord>(0));
+
+  LockGuard<Mutex> access_osr_lists(&osr_list_mutex_);
+  osr_candidates_.Clear();
 }


void OptimizingCompilerThread::FlushOutputQueue(bool restore_function_code) {
   OptimizingCompiler* optimizing_compiler;
   // The optimizing compiler is allocated in the CompilationInfo's zone.
-  while (output_queue_.Dequeue(&optimizing_compiler)) {
+  while (true) {
+    { LockGuard<Mutex> access_queue(&queue_mutex_);
+      if (!output_queue_.Dequeue(&optimizing_compiler)) break;
+    }
     CompilationInfo* info = optimizing_compiler->info();
     if (restore_function_code) {
       Handle<JSFunction> function = info->closure();
@@ -149,7 +156,6 @@
     delete info;
   }

-  osr_candidates_.Clear();
   RemoveStaleOSRCandidates(0);
 }

@@ -196,9 +202,12 @@
 void OptimizingCompilerThread::InstallOptimizedFunctions() {
   ASSERT(!IsOptimizerThread());
   HandleScope handle_scope(isolate_);
+
   OptimizingCompiler* compiler;
   while (true) {
-    if (!output_queue_.Dequeue(&compiler)) return;
+    { LockGuard<Mutex> access_queue(&queue_mutex_);
+      if (!output_queue_.Dequeue(&optimizing_compiler)) break;
+    }
     Compiler::InstallOptimizedCode(compiler);
   }

=======================================
--- /branches/bleeding_edge/src/optimizing-compiler-thread.h Thu Sep 12 11:30:56 2013 UTC +++ /branches/bleeding_edge/src/optimizing-compiler-thread.h Mon Sep 16 15:34:46 2013 UTC
@@ -115,7 +115,7 @@
   UnboundQueue<OptimizingCompiler*> input_queue_;
   // Queue of recompilation tasks ready to be installed (excluding OSR).
   UnboundQueue<OptimizingCompiler*> output_queue_;
- // List of all OSR related recompilation tasks (both incoming and ready ones).
+  // List of recompilation tasks for OSR in the input queue.
   List<OptimizingCompiler*> osr_candidates_;
   // List of recompilation tasks ready for OSR.
   List<OptimizingCompiler*> ready_for_osr_;
@@ -125,6 +125,8 @@
   TimeDelta time_spent_compiling_;
   TimeDelta time_spent_total_;

+  // TODO(yangguo): remove this once the memory leak has been figured out.
+  Mutex queue_mutex_;
   Mutex osr_list_mutex_;
   int osr_hits_;
   int osr_attempts_;

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to