Index: src/execution.cc |
diff --git a/src/execution.cc b/src/execution.cc |
index a9f72b33a0c6e2ced9cfcd00900c6cbafe096375..da2d880a4941ee88a8521530b5223dda3a1be395 100644 |
--- a/src/execution.cc |
+++ b/src/execution.cc |
@@ -502,6 +502,19 @@ void StackGuard::FullDeopt() { |
} |
+bool StackGuard::IsDeoptMarkedCode() { |
+ ExecutionAccess access(isolate_); |
+ return (thread_local_.interrupt_flags_ & DEOPT_MARKED_CODE) != 0; |
+} |
+ |
+ |
+void StackGuard::DeoptMarkedCode() { |
+ ExecutionAccess access(isolate_); |
+ thread_local_.interrupt_flags_ |= DEOPT_MARKED_CODE; |
+ set_interrupt_limits(access); |
+} |
+ |
+ |
#ifdef ENABLE_DEBUGGER_SUPPORT |
bool StackGuard::IsDebugBreak() { |
ExecutionAccess access(isolate_); |
@@ -1013,6 +1026,10 @@ MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) { |
stack_guard->Continue(FULL_DEOPT); |
Deoptimizer::DeoptimizeAll(isolate); |
} |
+ if (stack_guard->IsDeoptMarkedCode()) { |
+ stack_guard->Continue(DEOPT_MARKED_CODE); |
+ Deoptimizer::DeoptimizeMarkedCode(isolate); |
+ } |
if (stack_guard->IsInstallCodeRequest()) { |
ASSERT(isolate->concurrent_recompilation_enabled()); |
stack_guard->Continue(INSTALL_CODE); |