Fix leak in optimizing compiler thread.
authoryangguo@chromium.org <yangguo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 16 Oct 2013 16:27:17 +0000 (16:27 +0000)
committeryangguo@chromium.org <yangguo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 16 Oct 2013 16:27:17 +0000 (16:27 +0000)
R=mvstanton@chromium.org
BUG=

Review URL: https://codereview.chromium.org/27473006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17247 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/optimizing-compiler-thread.cc
src/optimizing-compiler-thread.h

index fa2da97..e9c0254 100644 (file)
 namespace v8 {
 namespace internal {
 
+OptimizingCompilerThread::~OptimizingCompilerThread() {
+  ASSERT_EQ(0, input_queue_length_);
+  DeleteArray(input_queue_);
+  if (FLAG_concurrent_osr) {
+#ifdef DEBUG
+    for (int i = 0; i < osr_buffer_capacity_; i++) {
+      CHECK_EQ(NULL, osr_buffer_[i]);
+    }
+#endif
+    DeleteArray(osr_buffer_);
+  }
+}
+
 
 void OptimizingCompilerThread::Run() {
 #ifdef DEBUG
index a9e108c..754aece 100644 (file)
@@ -63,21 +63,15 @@ class OptimizingCompilerThread : public Thread {
       blocked_jobs_(0) {
     NoBarrier_Store(&stop_thread_, static_cast<AtomicWord>(CONTINUE));
     input_queue_ = NewArray<RecompileJob*>(input_queue_capacity_);
-    osr_buffer_ = NewArray<RecompileJob*>(osr_buffer_capacity_);
-    // Mark OSR buffer slots as empty.
-    for (int i = 0; i < osr_buffer_capacity_; i++) osr_buffer_[i] = NULL;
-  }
-
-  ~OptimizingCompilerThread() {
-    ASSERT_EQ(0, input_queue_length_);
-#ifdef DEBUG
-    for (int i = 0; i < osr_buffer_capacity_; i++) {
-      CHECK_EQ(NULL, osr_buffer_[i]);
+    if (FLAG_concurrent_osr) {
+      // Allocate and mark OSR buffer slots as empty.
+      osr_buffer_ = NewArray<RecompileJob*>(osr_buffer_capacity_);
+      for (int i = 0; i < osr_buffer_capacity_; i++) osr_buffer_[i] = NULL;
     }
-#endif
-    DeleteArray(osr_buffer_);
   }
 
+  ~OptimizingCompilerThread();
+
   void Run();
   void Stop();
   void Flush();