summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-01-27 14:18:13 +0100
committerAnna Henningsen <anna@addaleax.net>2019-01-29 20:01:58 +0100
commit55569759b32b61a94c57283e2030e737ae06c860 (patch)
treeaffc6c666a875f2da8b090bf0c2dfc3bb39f8772 /src
parent1a37fd63c6b098524bb577e1db69bcb073fc5171 (diff)
downloadandroid-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.cc20
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());