Index: src/execution.cc |
diff --git a/src/execution.cc b/src/execution.cc |
index c59a737c32b63158f18b4f1fd41be7525c1f7f05..7e597d07e9bc01e8093ebb415eb7a97a1e02f026 100644 |
--- a/src/execution.cc |
+++ b/src/execution.cc |
@@ -459,6 +459,22 @@ void StackGuard::RequestGC() { |
} |
+bool StackGuard::IsInstallCodeRequest() { |
+ ExecutionAccess access(isolate_); |
+ return (thread_local_.interrupt_flags_ & INSTALL_CODE) != 0; |
+} |
+ |
+ |
+void StackGuard::RequestInstallCode() { |
+ ExecutionAccess access(isolate_); |
+ thread_local_.interrupt_flags_ |= INSTALL_CODE; |
+ if (thread_local_.postpone_interrupts_nesting_ == 0) { |
+ thread_local_.jslimit_ = thread_local_.climit_ = kInterruptLimit; |
+ isolate_->heap()->SetStackLimits(); |
+ } |
+} |
+ |
+ |
bool StackGuard::IsFullDeopt() { |
ExecutionAccess access(isolate_); |
return (thread_local_.interrupt_flags_ & FULL_DEOPT) != 0; |
@@ -916,7 +932,6 @@ MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) { |
isolate->counters()->stack_interrupts()->Increment(); |
isolate->counters()->runtime_profiler_ticks()->Increment(); |
- isolate->runtime_profiler()->OptimizeNow(); |
#ifdef ENABLE_DEBUGGER_SUPPORT |
if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) { |
DebugBreakHelper(isolate); |
@@ -935,6 +950,11 @@ MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) { |
stack_guard->Continue(FULL_DEOPT); |
Deoptimizer::DeoptimizeAll(isolate); |
} |
+ if (FLAG_concurrent_recompilation && stack_guard->IsInstallCodeRequest()) { |
Michael Starzinger
2013/09/12 10:53:10
We should only receive this stack guard request of
|
+ stack_guard->Continue(INSTALL_CODE); |
+ isolate->optimizing_compiler_thread()->InstallOptimizedFunctions(); |
+ } |
+ isolate->runtime_profiler()->OptimizeNow(); |
return isolate->heap()->undefined_value(); |
} |