From 55569759b32b61a94c57283e2030e737ae06c860 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 27 Jan 2019 14:18:13 +0100 Subject: [PATCH] src: pass along errors from PromiseWrap instantiation PR-URL: https://github.com/nodejs/node/pull/25734 Reviewed-By: James M Snell Reviewed-By: Gus Caplan --- src/async_wrap.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 70fc86702f0b10..193fec7ca7087a 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -201,15 +201,15 @@ PromiseWrap* PromiseWrap::New(Environment* env, Local promise, PromiseWrap* parent_wrap, bool silent) { - Local object = env->promise_wrap_template() - ->NewInstance(env->context()).ToLocalChecked(); - object->SetInternalField(PromiseWrap::kIsChainedPromiseField, - parent_wrap != nullptr ? - v8::True(env->isolate()) : - v8::False(env->isolate())); + Local obj; + if (!env->promise_wrap_template()->NewInstance(env->context()).ToLocal(&obj)) + return nullptr; + obj->SetInternalField(PromiseWrap::kIsChainedPromiseField, + parent_wrap != nullptr ? v8::True(env->isolate()) + : v8::False(env->isolate())); CHECK_EQ(promise->GetAlignedPointerFromInternalField(0), nullptr); - promise->SetInternalField(0, object); - return new PromiseWrap(env, object, silent); + promise->SetInternalField(0, obj); + return new PromiseWrap(env, obj, silent); } void PromiseWrap::getIsChainedPromise(Local property, @@ -242,6 +242,7 @@ static void PromiseHook(PromiseHookType type, Local promise, PromiseWrap* parent_wrap = extractPromiseWrap(parent_promise); if (parent_wrap == nullptr) { parent_wrap = PromiseWrap::New(env, parent_promise, nullptr, true); + if (parent_wrap == nullptr) return; } AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent_wrap); @@ -251,7 +252,8 @@ static void PromiseHook(PromiseHookType type, Local promise, } } - CHECK_NOT_NULL(wrap); + if (wrap == nullptr) return; + if (type == PromiseHookType::kBefore) { env->async_hooks()->push_async_ids( wrap->get_async_id(), wrap->get_trigger_async_id());