Version 3.24.8

ARM: fix loading of global object in LWrapReceiver (Chromium issue 318420).

Fix a race between concurrent recompilation and OSR (Chromium issue 330046).

Turn off concurrent sweeping (issue 3071).

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@18423 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
index ade6928..2919eb0 100644
--- a/src/arm/lithium-codegen-arm.cc
+++ b/src/arm/lithium-codegen-arm.cc
@@ -3494,7 +3494,9 @@
   __ b(&result_in_receiver);
 
   __ bind(&global_object);
-  __ ldr(result, GlobalObjectOperand());
+
+  __ ldr(result, MemOperand(fp, StandardFrameConstants::kContextOffset));
+  __ ldr(result, ContextOperand(result, Context::GLOBAL_OBJECT_INDEX));
   __ ldr(result,
          FieldMemOperand(result, JSGlobalObject::kGlobalReceiverOffset));
   if (result.is(receiver)) {
diff --git a/src/debug.cc b/src/debug.cc
index 4a7fa6b..5c04efa 100644
--- a/src/debug.cc
+++ b/src/debug.cc
@@ -2125,7 +2125,8 @@
         bool prev_force_debugger_active =
             isolate_->debugger()->force_debugger_active();
         isolate_->debugger()->set_force_debugger_active(true);
-        function->ReplaceCode(*Compiler::GetCodeForDebugging(function));
+        Handle<Code> code = Compiler::GetCodeForDebugging(function);
+        function->ReplaceCode(*code);
         isolate_->debugger()->set_force_debugger_active(
             prev_force_debugger_active);
       }
diff --git a/src/flag-definitions.h b/src/flag-definitions.h
index 7489df7..1230801 100644
--- a/src/flag-definitions.h
+++ b/src/flag-definitions.h
@@ -534,8 +534,8 @@
             "trace progress of the incremental marking")
 DEFINE_bool(track_gc_object_stats, false,
             "track object counts and memory usage")
-DEFINE_bool(parallel_sweeping, false, "enable parallel sweeping")
-DEFINE_bool(concurrent_sweeping, true, "enable concurrent sweeping")
+DEFINE_bool(parallel_sweeping, true, "enable parallel sweeping")
+DEFINE_bool(concurrent_sweeping, false, "enable concurrent sweeping")
 DEFINE_int(sweeper_threads, 0,
            "number of parallel and concurrent sweeping threads")
 #ifdef VERIFY_HEAP
diff --git a/src/objects-inl.h b/src/objects-inl.h
index 5ad0453..83d4f3d 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -5114,6 +5114,11 @@
   bool was_optimized = IsOptimized();
   bool is_optimized = code->kind() == Code::OPTIMIZED_FUNCTION;
 
+  if (was_optimized && is_optimized) {
+    shared()->EvictFromOptimizedCodeMap(
+      this->code(), "Replacing with another optimized code");
+  }
+
   set_code(code);
 
   // Add/remove the function from the list of optimized functions for this
diff --git a/src/version.cc b/src/version.cc
index b694488..6e66d24 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -34,7 +34,7 @@
 // system so their names cannot be changed without changing the scripts.
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     24
-#define BUILD_NUMBER      7
+#define BUILD_NUMBER      8
 #define PATCH_LEVEL       0
 // Use 1 for candidates and 0 otherwise.
 // (Boolean macro values are not supported by all preprocessors.)