Profiler experiments: Honor postponing of interrupts in HandleStackGuardInterrupt
authorjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 7 Mar 2012 17:31:33 +0000 (17:31 +0000)
committerjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 7 Mar 2012 17:31:33 +0000 (17:31 +0000)
Review URL: https://chromiumcodereview.appspot.com/9620009

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

src/execution.cc
src/execution.h

index 1f019820b84e9da391ed1d7d80fc6770067f36bc..443d4b8d0f2af0df6652372baf52494f5b500131 100644 (file)
@@ -376,6 +376,12 @@ void StackGuard::DisableInterrupts() {
 }
 
 
+bool StackGuard::ShouldPostponeInterrupts() {
+  ExecutionAccess access(isolate_);
+  return should_postpone_interrupts(access);
+}
+
+
 bool StackGuard::IsInterrupted() {
   ExecutionAccess access(isolate_);
   return (thread_local_.interrupt_flags_ & INTERRUPT) != 0;
@@ -874,6 +880,9 @@ void Execution::ProcessDebugMessages(bool debug_command_only) {
 
 MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) {
   StackGuard* stack_guard = isolate->stack_guard();
+  if (stack_guard->ShouldPostponeInterrupts()) {
+    return isolate->heap()->undefined_value();
+  }
 
   if (stack_guard->IsGCRequest()) {
     isolate->heap()->CollectAllGarbage(false, "StackGuard GC request");
index d9ec9dccf527c551af86a366843749f199397c63..01e4b9da4f7c6905d5cb72a21232499171f56690 100644 (file)
@@ -226,6 +226,7 @@ class StackGuard {
   Address address_of_real_jslimit() {
     return reinterpret_cast<Address>(&thread_local_.real_jslimit_);
   }
+  bool ShouldPostponeInterrupts();
 
  private:
   StackGuard();