From 3dfd929ea07487f2295553df397720d8d75d227c Mon Sep 17 00:00:00 2001 From: Michael Achenbach Date: Sat, 21 Feb 2015 14:25:40 +0100 Subject: [PATCH] Version 4.2.77.1 Revert "Correctly propagate terminate exception in TryCall." This reverts commit a49b55b78844557b65a98e7a77dd26078157ed7f. R=jkummerow@chromium.org TBR=hablich@chromium.org, jkummerow@chromium.org, yangguo@chromium.org BUG=v8:3892 LOG=n Review URL: https://codereview.chromium.org/945243002 Cr-Commit-Position: refs/heads/4.2.77@{#2} Cr-Branched-From: e0110920d6f98f0ba2ac0d680f635ae3f094a04e-refs/heads/master@{#26757} --- src/execution.cc | 13 +++++------ src/version.cc | 2 +- test/cctest/test-thread-termination.cc | 30 -------------------------- 3 files changed, 8 insertions(+), 37 deletions(-) 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()); -}