Skip to content
forked from v8/v8

Commit

Permalink
[M114-LTS][promises, async stack traces] Fix the case when the closur…
Browse files Browse the repository at this point in the history
…e has run

M114 changes:
- replace IsNativeContext(*context) by context->IsNativeContext()

We were using the closure pointing to NativeContext as a marker that the
closure has run, but async stack trace code was confused about it.

(cherry picked from commit bde3d36)

(cherry picked from commit cbd09b2)

No-Try: true
No-Presubmit: true
No-Tree-Checks: true
Bug: chromium:1501326
Change-Id: I30d438f3b2e3fdd7562ea9a79dde4561ce9b0083
Cr-Original-Original-Commit-Position: refs/heads/main@{#90949}
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5110982
Commit-Queue: Marja Hölttä <marja@chromium.org>
Auto-Submit: Marja Hölttä <marja@chromium.org>
Cr-Original-Commit-Position: refs/branch-heads/12.0@{v8#18}
Cr-Original-Branched-From: ed7b4ca-refs/heads/12.0.267@{#1}
Cr-Original-Branched-From: 210e75b-refs/heads/main@{#90651}
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5117018
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Artem Sumaneev <asumaneev@google.com>
Cr-Commit-Position: refs/branch-heads/11.4@{v8#77}
Cr-Branched-From: 8a8a1e7-refs/heads/11.4.183@{#1}
Cr-Branched-From: 5483d8e-refs/heads/main@{#87241}
  • Loading branch information
zakharvoit authored and V8 LUCI CQ committed Jan 19, 2024
1 parent 49f297a commit 7c731a2
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions src/execution/isolate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -984,7 +984,13 @@ void CaptureAsyncStackTrace(Isolate* isolate, Handle<JSPromise> promise,
isolate);
builder->AppendPromiseCombinatorFrame(function, combinator);

// Now peak into the Promise.all() resolve element context to
if (context->IsNativeContext()) {
// NativeContext is used as a marker that the closure was already
// called. We can't access the reject element context any more.
return;
}

// Now peek into the Promise.all() resolve element context to
// find the promise capability that's being resolved when all
// the concurrent promises resolve.
int const index =
Expand All @@ -1003,7 +1009,13 @@ void CaptureAsyncStackTrace(Isolate* isolate, Handle<JSPromise> promise,
context->native_context().promise_all_settled(), isolate);
builder->AppendPromiseCombinatorFrame(function, combinator);

// Now peak into the Promise.allSettled() resolve element context to
if (context->IsNativeContext()) {
// NativeContext is used as a marker that the closure was already
// called. We can't access the reject element context any more.
return;
}

// Now peek into the Promise.allSettled() resolve element context to
// find the promise capability that's being resolved when all
// the concurrent promises resolve.
int const index =
Expand All @@ -1021,7 +1033,13 @@ void CaptureAsyncStackTrace(Isolate* isolate, Handle<JSPromise> promise,
isolate);
builder->AppendPromiseCombinatorFrame(function, combinator);

// Now peak into the Promise.any() reject element context to
if (context->IsNativeContext()) {
// NativeContext is used as a marker that the closure was already
// called. We can't access the reject element context any more.
return;
}

// Now peek into the Promise.any() reject element context to
// find the promise capability that's being resolved when any of
// the concurrent promises resolve.
int const index = PromiseBuiltins::kPromiseAnyRejectElementCapabilitySlot;
Expand Down

0 comments on commit 7c731a2

Please sign in to comment.