| Index: src/execution.cc
|
| diff --git a/src/execution.cc b/src/execution.cc
|
| index ee6cb970cb8bd6d852f3e34a681e82d9f3efb686..ee359e722f68f45490778a6800e7e377c98328f7 100644
|
| --- a/src/execution.cc
|
| +++ b/src/execution.cc
|
| @@ -388,18 +388,6 @@ void StackGuard::ClearInterrupt(int flagbit) {
|
| }
|
|
|
|
|
| -bool StackGuard::CheckAndClearInterrupt(InterruptFlag flag,
|
| - const ExecutionAccess& lock) {
|
| - int flagbit = 1 << flag;
|
| - bool result = (thread_local_.interrupt_flags_ & flagbit);
|
| - thread_local_.interrupt_flags_ &= ~flagbit;
|
| - if (!should_postpone_interrupts(lock) && !has_pending_interrupts(lock)) {
|
| - reset_limits(lock);
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -
|
| char* StackGuard::ArchiveStackGuard(char* to) {
|
| ExecutionAccess access(isolate_);
|
| OS::MemCopy(to, reinterpret_cast<char*>(&thread_local_), sizeof(ThreadLocal));
|
| @@ -732,37 +720,44 @@ void Execution::ProcessDebugMessages(Isolate* isolate,
|
|
|
|
|
| Object* StackGuard::HandleInterrupts() {
|
| - ExecutionAccess access(isolate_);
|
| - if (should_postpone_interrupts(access)) {
|
| - return isolate_->heap()->undefined_value();
|
| + { ExecutionAccess access(isolate_);
|
| + if (should_postpone_interrupts(access)) {
|
| + return isolate_->heap()->undefined_value();
|
| + }
|
| }
|
|
|
| - if (CheckAndClearInterrupt(API_INTERRUPT, access)) {
|
| + if (CheckApiInterrupt()) {
|
| + ClearApiInterrupt();
|
| isolate_->InvokeApiInterruptCallback();
|
| }
|
|
|
| - if (CheckAndClearInterrupt(GC_REQUEST, access)) {
|
| + if (CheckGC()) {
|
| isolate_->heap()->CollectAllGarbage(Heap::kNoGCFlags, "GC interrupt");
|
| + ClearGC();
|
| }
|
|
|
| if (CheckDebugBreak() || CheckDebugCommand()) {
|
| Execution::DebugBreakHelper(isolate_);
|
| }
|
|
|
| - if (CheckAndClearInterrupt(TERMINATE_EXECUTION, access)) {
|
| + if (CheckTerminateExecution()) {
|
| + ClearTerminateExecution();
|
| return isolate_->TerminateExecution();
|
| }
|
|
|
| - if (CheckAndClearInterrupt(FULL_DEOPT, access)) {
|
| + if (CheckFullDeopt()) {
|
| + ClearFullDeopt();
|
| Deoptimizer::DeoptimizeAll(isolate_);
|
| }
|
|
|
| - if (CheckAndClearInterrupt(DEOPT_MARKED_ALLOCATION_SITES, access)) {
|
| + if (CheckDeoptMarkedAllocationSites()) {
|
| + ClearDeoptMarkedAllocationSites();
|
| isolate_->heap()->DeoptMarkedAllocationSites();
|
| }
|
|
|
| - if (CheckAndClearInterrupt(INSTALL_CODE, access)) {
|
| + if (CheckInstallCode()) {
|
| ASSERT(isolate_->concurrent_recompilation_enabled());
|
| + ClearInstallCode();
|
| isolate_->optimizing_compiler_thread()->InstallOptimizedFunctions();
|
| }
|
|
|
|
|