Skip to content

Commit 3e7238e

Browse files
Stephen BelangerMylesBorins
Stephen Belanger
authored andcommittedAug 31, 2021
deps: V8: cherry-pick 272445f10927
Original commit message: [runtime] Fix promise hooks promiseCapability can be undefined. Bug: v8:11025 Bug: chromium:1201113 Change-Id: I9da8764820cee0db1f0c38ed2fff0e3afeb9a80e Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2844649 Reviewed-by: Marja Hölttä <marja@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#74117} Refs: v8/v8@272445f PR-URL: #36394 Backport-PR-URL: #38577 Reviewed-By: Bryan English <bryan@bryanenglish.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Vladimir de Turckheim <vlad2t@hotmail.com> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 214e568 commit 3e7238e

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed
 

‎common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
# Reset this number to 0 on major V8 upgrades.
3838
# Increment by one for each non-official patch applied to deps/v8.
39-
'v8_embedder_string': '-node.77',
39+
'v8_embedder_string': '-node.78',
4040

4141
##### V8 defaults for Node.js #####
4242

‎deps/v8/src/builtins/promise-misc.tq

+8-5
Original file line numberDiff line numberDiff line change
@@ -133,39 +133,39 @@ transitioning macro RunContextPromiseHookResolve(implicit context: Context)(
133133

134134
@export
135135
transitioning macro RunContextPromiseHookBefore(implicit context: Context)(
136-
promiseOrCapability: JSPromise|PromiseCapability) {
136+
promiseOrCapability: JSPromise|PromiseCapability|Undefined) {
137137
RunContextPromiseHook(
138138
NativeContextSlot::PROMISE_HOOK_BEFORE_FUNCTION_INDEX, promiseOrCapability,
139139
PromiseHookFlags());
140140
}
141141

142142
@export
143143
transitioning macro RunContextPromiseHookBefore(implicit context: Context)(
144-
promiseOrCapability: JSPromise|PromiseCapability, flags: uint32) {
144+
promiseOrCapability: JSPromise|PromiseCapability|Undefined, flags: uint32) {
145145
RunContextPromiseHook(
146146
NativeContextSlot::PROMISE_HOOK_BEFORE_FUNCTION_INDEX, promiseOrCapability,
147147
flags);
148148
}
149149

150150
@export
151151
transitioning macro RunContextPromiseHookAfter(implicit context: Context)(
152-
promiseOrCapability: JSPromise|PromiseCapability) {
152+
promiseOrCapability: JSPromise|PromiseCapability|Undefined) {
153153
RunContextPromiseHook(
154154
NativeContextSlot::PROMISE_HOOK_AFTER_FUNCTION_INDEX, promiseOrCapability,
155155
PromiseHookFlags());
156156
}
157157

158158
@export
159159
transitioning macro RunContextPromiseHookAfter(implicit context: Context)(
160-
promiseOrCapability: JSPromise|PromiseCapability, flags: uint32) {
160+
promiseOrCapability: JSPromise|PromiseCapability|Undefined, flags: uint32) {
161161
RunContextPromiseHook(
162162
NativeContextSlot::PROMISE_HOOK_AFTER_FUNCTION_INDEX, promiseOrCapability,
163163
flags);
164164
}
165165

166166
transitioning macro RunContextPromiseHook(implicit context: Context)(
167167
slot: NativeContextSlot,
168-
promiseOrCapability: JSPromise|PromiseCapability, flags: uint32) {
168+
promiseOrCapability: JSPromise|PromiseCapability|Undefined, flags: uint32) {
169169
if (!IsContextPromiseHookEnabled(flags)) return;
170170
const nativeContext: NativeContext = LoadNativeContext(context);
171171
const hook = Cast<JSFunction>(nativeContext[slot]) otherwise return;
@@ -178,6 +178,9 @@ transitioning macro RunContextPromiseHook(implicit context: Context)(
178178
case (capability: PromiseCapability): {
179179
promise = Cast<JSPromise>(capability.promise) otherwise return;
180180
}
181+
case (Undefined): {
182+
return;
183+
}
181184
}
182185

183186
try {

‎deps/v8/test/mjsunit/promise-hooks.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2020 the V8 project authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
//
4+
55
// Flags: --allow-natives-syntax --opt --no-always-opt --no-stress-opt --deopt-every-n-times=0 --ignore-unhandled-promises
66

77
let log = [];
@@ -242,3 +242,13 @@ optimizerBailout(async () => {
242242
});
243243
basicTest();
244244
exceptions();
245+
246+
(function regress1126309() {
247+
function __f_16(test) {
248+
test();
249+
d8.promise.setHooks( undefined, () => {});
250+
%PerformMicrotaskCheckpoint();
251+
d8.promise.setHooks();
252+
}
253+
__f_16(async () => { await Promise.resolve()});
254+
})();

0 commit comments

Comments
 (0)
Please sign in to comment.