| Index: src/execution.cc
|
| ===================================================================
|
| --- src/execution.cc (revision 2717)
|
| +++ src/execution.cc (working copy)
|
| @@ -156,7 +156,8 @@
|
| ASSERT(catcher.HasCaught());
|
| ASSERT(Top::has_pending_exception());
|
| ASSERT(Top::external_caught_exception());
|
| - Top::optional_reschedule_exception(true);
|
| + bool is_bottom_call = HandleScopeImplementer::instance()->CallDepthIsZero();
|
| + Top::OptionalRescheduleException(is_bottom_call, true);
|
| result = v8::Utils::OpenHandle(*catcher.Exception());
|
| }
|
|
|
| @@ -328,6 +329,19 @@
|
| }
|
|
|
|
|
| +bool StackGuard::IsTerminateExecution() {
|
| + ExecutionAccess access;
|
| + return thread_local_.interrupt_flags_ & TERMINATE;
|
| +}
|
| +
|
| +
|
| +void StackGuard::TerminateExecution() {
|
| + ExecutionAccess access;
|
| + thread_local_.interrupt_flags_ |= TERMINATE;
|
| + set_limits(kInterruptLimit, access);
|
| +}
|
| +
|
| +
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| bool StackGuard::IsDebugBreak() {
|
| ExecutionAccess access;
|
| @@ -638,6 +652,10 @@
|
| }
|
| #endif
|
| if (StackGuard::IsPreempted()) RuntimePreempt();
|
| + if (StackGuard::IsTerminateExecution()) {
|
| + StackGuard::Continue(TERMINATE);
|
| + return Top::TerminateExecution();
|
| + }
|
| if (StackGuard::IsInterrupted()) {
|
| // interrupt
|
| StackGuard::Continue(INTERRUPT);
|
|
|