diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-01-27 14:18:13 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-01-29 20:01:58 +0100 |
commit | 55569759b32b61a94c57283e2030e737ae06c860 (patch) | |
tree | affc6c666a875f2da8b090bf0c2dfc3bb39f8772 /src | |
parent | 1a37fd63c6b098524bb577e1db69bcb073fc5171 (diff) | |
download | android-node-v8-55569759b32b61a94c57283e2030e737ae06c860.tar.gz android-node-v8-55569759b32b61a94c57283e2030e737ae06c860.tar.bz2 android-node-v8-55569759b32b61a94c57283e2030e737ae06c860.zip |
src: pass along errors from PromiseWrap instantiation
PR-URL: https://github.com/nodejs/node/pull/25734
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Diffstat (limited to 'src')
-rw-r--r-- | src/async_wrap.cc | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 70fc86702f..193fec7ca7 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -201,15 +201,15 @@ PromiseWrap* PromiseWrap::New(Environment* env, Local<Promise> promise, PromiseWrap* parent_wrap, bool silent) { - Local<Object> 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<Object> 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<String> property, @@ -242,6 +242,7 @@ static void PromiseHook(PromiseHookType type, Local<Promise> 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> 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()); |