Reviewers: Søren Gjesse,

Description:
Ignore debug break events when bootstrapper is active. Collecting debug data
when the context is not yet setup may lead to subtle errors like in the
following Chromium bug: http://crbug.com/28933

Please review this at http://codereview.chromium.org/497006

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
   M     src/execution.cc
   M     test/cctest/test-debug.cc


Index: test/cctest/test-debug.cc
===================================================================
--- test/cctest/test-debug.cc   (revision 3463)
+++ test/cctest/test-debug.cc   (working copy)
@@ -3141,7 +3141,40 @@
    CheckDebuggerUnloaded();
  }

+static const char* kSimpleExtensionSource =
+  "(function Foo() {"
+  "  return 4;"
+  "})() ";

+// http://crbug.com/28933
+// Test that debug break is disabled when bootstrapper is active.
+TEST(NoBreakWhenBootstrapping) {
+  v8::HandleScope scope;
+
+  // Register a debug event listener which sets the break flag and counts.
+  v8::Debug::SetDebugEventListener(DebugEventCounter);
+
+  // Set the debug break flag.
+  v8::Debug::DebugBreak();
+  break_point_hit_count = 0;
+  {
+      // Create a context with an extension to make sure that some  
JavaScript
+      // code is executed during bootstrapping.
+      v8::RegisterExtension(new v8::Extension("simpletest",
+                                              kSimpleExtensionSource));
+      const char* extension_names[] = { "simpletest" };
+      v8::ExtensionConfiguration extensions(1, extension_names);
+      v8::Persistent<v8::Context> context = v8::Context::New(&extensions);
+      context.Dispose();
+  }
+  // Check that no DebugBreak events occured during the context creation.
+  CHECK_EQ(0, break_point_hit_count);
+
+  // Get rid of the debug event listener.
+  v8::Debug::SetDebugEventListener(NULL);
+  CheckDebuggerUnloaded();
+}
+
  static v8::Handle<v8::Array> NamedEnum(const v8::AccessorInfo&) {
    v8::Handle<v8::Array> result = v8::Array::New(3);
    result->Set(v8::Integer::New(0), v8::String::New("a"));
Index: src/execution.cc
===================================================================
--- src/execution.cc    (revision 3463)
+++ src/execution.cc    (working copy)
@@ -30,6 +30,7 @@
  #include "v8.h"

  #include "api.h"
+#include "bootstrapper.h"
  #include "codegen-inl.h"
  #include "debug.h"
  #include "simulator.h"
@@ -607,6 +608,11 @@
      return Heap::undefined_value();
    }

+  // Ignore debug break during bootstrapping.
+  if (Bootstrapper::IsActive()) {
+    return Heap::undefined_value();
+  }
+
    {
      JavaScriptFrameIterator it;
      ASSERT(!it.done());


-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to