diff options
author | Michaël Zasso <targos@protonmail.com> | 2021-05-17 19:56:59 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2021-06-10 11:11:39 +0200 |
commit | becfad1e6da6ddbcb8180422f55b9447b535abbf (patch) | |
tree | 68de8db069aec248fe2da96c3153b3591eef4f59 /deps | |
parent | c67828549876ca915c7999ed383b294c5138650c (diff) | |
download | node-new-becfad1e6da6ddbcb8180422f55b9447b535abbf.tar.gz |
deps: V8: cherry-pick fa4cb172cde2
Original commit message:
[runtime] Fix Promise.all context promise hooks
We have to take the slow path in Promise.all if context promise hooks
are set. The fast-path doesn't create intermediate promises by default.
Bug: chromium:1204132, v8:11025
Change-Id: Ide92de00a4f6df05e0ddbc8814f6673bd667f426
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2866771
Reviewed-by: Victor Gomes <victorgomes@chromium.org>
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#74326}
Refs: https://github.com/v8/v8/commit/fa4cb172cde256a1e71d675d81fbb4b85d1e5f66
PR-URL: https://github.com/nodejs/node/pull/38273
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: Mary Marchini <oss@mmarchini.me>
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/src/builtins/promise-all.tq | 3 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/promise-hooks.js | 13 |
2 files changed, 13 insertions, 3 deletions
diff --git a/deps/v8/src/builtins/promise-all.tq b/deps/v8/src/builtins/promise-all.tq index 294c5e911c..5ab64a167d 100644 --- a/deps/v8/src/builtins/promise-all.tq +++ b/deps/v8/src/builtins/promise-all.tq @@ -231,8 +231,7 @@ Reject(Object) { // the PromiseReaction (aka we can pass undefined to // PerformPromiseThen), since this is only necessary for DevTools and // PromiseHooks. - if (promiseResolveFunction != Undefined || - IsIsolatePromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate() || + if (promiseResolveFunction != Undefined || NeedsAnyPromiseHooks() || IsPromiseSpeciesProtectorCellInvalid() || Is<Smi>(nextValue) || !IsPromiseThenLookupChainIntact( nativeContext, UnsafeCast<HeapObject>(nextValue).map)) { diff --git a/deps/v8/test/mjsunit/promise-hooks.js b/deps/v8/test/mjsunit/promise-hooks.js index bf51777dce..f7c1558c1d 100644 --- a/deps/v8/test/mjsunit/promise-hooks.js +++ b/deps/v8/test/mjsunit/promise-hooks.js @@ -246,7 +246,7 @@ exceptions(); (function regress1126309() { function __f_16(test) { test(); - d8.promise.setHooks( undefined, () => {}); + d8.promise.setHooks(undefined, () => {}); %PerformMicrotaskCheckpoint(); d8.promise.setHooks(); } @@ -262,3 +262,14 @@ exceptions(); %PerformMicrotaskCheckpoint(); d8.promise.setHooks(); })(); + + +(function promiseAll() { + let initCount = 0; + d8.promise.setHooks(() => { initCount++}); + Promise.all([Promise.resolve(1)]); + %PerformMicrotaskCheckpoint(); + assertEquals(initCount, 3); + + d8.promise.setHooks(); +})(); |