diff --git a/src/execution.cc b/src/execution.cc index facd3add5fe..9dfef372bc3 100644 --- a/src/execution.cc +++ b/src/execution.cc @@ -210,18 +210,19 @@ MaybeHandle Execution::TryCall(Handle func, DCHECK(catcher.HasCaught()); DCHECK(isolate->has_pending_exception()); DCHECK(isolate->external_caught_exception()); - if (isolate->pending_exception() == - isolate->heap()->termination_exception()) { - is_termination = true; - } else { - if (exception_out != NULL) { + if (exception_out != NULL) { + if (isolate->pending_exception() == + isolate->heap()->termination_exception()) { + is_termination = true; + } else { *exception_out = v8::Utils::OpenHandle(*catcher.Exception()); } } - isolate->OptionalRescheduleException(false); + isolate->OptionalRescheduleException(true); } DCHECK(!isolate->has_pending_exception()); + DCHECK(!isolate->external_caught_exception()); } if (is_termination) isolate->TerminateExecution(); return maybe_result; diff --git a/src/version.cc b/src/version.cc index 4cc30dfac58..a2889bf85d8 100644 --- a/src/version.cc +++ b/src/version.cc @@ -12,7 +12,7 @@ #define MAJOR_VERSION 4 #define MINOR_VERSION 2 #define BUILD_NUMBER 77 -#define PATCH_LEVEL 0 +#define PATCH_LEVEL 1 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) #define IS_CANDIDATE_VERSION 0 diff --git a/test/cctest/test-thread-termination.cc b/test/cctest/test-thread-termination.cc index 3095b83bdac..d31b4131dfc 100644 --- a/test/cctest/test-thread-termination.cc +++ b/test/cctest/test-thread-termination.cc @@ -474,33 +474,3 @@ TEST(ErrorObjectAfterTermination) { // TODO(yangguo): crbug/403509. Check for empty handle instead. CHECK(error->IsUndefined()); } - - -void InnerTryCallTerminate(const v8::FunctionCallbackInfo& args) { - CHECK(!v8::V8::IsExecutionTerminating(args.GetIsolate())); - v8::Handle global = CcTest::global(); - v8::Handle loop = - v8::Handle::Cast(global->Get(v8_str("loop"))); - i::MaybeHandle result = - i::Execution::TryCall(v8::Utils::OpenHandle((*loop)), - v8::Utils::OpenHandle((*global)), 0, NULL, NULL); - CHECK(result.is_null()); - CHECK(v8::V8::IsExecutionTerminating(CcTest::isolate())); -} - - -TEST(TerminationInInnerTryCall) { - v8::Isolate* isolate = CcTest::isolate(); - v8::HandleScope scope(isolate); - v8::Handle global_template = CreateGlobalTemplate( - CcTest::isolate(), TerminateCurrentThread, DoLoopNoCall); - global_template->Set( - v8_str("inner_try_call_terminate"), - v8::FunctionTemplate::New(isolate, InnerTryCallTerminate)); - v8::Handle context = - v8::Context::New(CcTest::isolate(), NULL, global_template); - v8::Context::Scope context_scope(context); - v8::TryCatch try_catch; - CompileRun("inner_try_call_terminate()"); - CHECK(try_catch.HasTerminated()); -}