-
Dominik Inführ authored
This is a reland of 90a9d6cb The original CL got reverted because of two different issues: * The DCHECK failure on AllowGarbageCollection::IsAllowed() got fixed in https://crrev.com/c/3289625. * The crash with the incremental marking job were because of a nested GC started from a SafepointScope. This CL adds IgnoreLocalGCRequests scopes to SafepointScopes in src/heap. In addition this CL prevents shared GCs during isolate deserialization by locking the clients_mutex_ until the isolate is fully deserialized. The original GC used a DisallowSafepoints scope to prevent shared GCs from interrupting isolate deserialization. Original change's description: > [heap] Support multiple clients in shared GC > > Add support for safepointing multiple isolates as described in the > design doc (link is below). A safepoint across multiple isolates is > considered a global safepoint to distinguish it from regular safepoints. > > The basic idea behind the implementation is that we reach a > safepoint for each client. What's new is that now also main threads > need to participate in the safepointing protocol and need to give up > control in time. The slow paths of Park(), Unpark() and Safepoint() on > the main thread need to be adjusted for this reason as well. > > This CL introduces GlobalSafepoint and GlobalSafepointScope to mirror > IsolateSafepoint and IsolateSafepointScope. > > This CL adds the type IgnoreLocalGCRequests, it is used to prevent > Park() and Unpark() from honoring the request from background threads > to perform a local GC. This is used heap-internally to not have GCs > (or even nested GCs) in certain locations. E.g. when initiating a > safepoint to perform a GC we don't want a "recursive" GC to occur. > > Design doc: https://docs.google.com/document/d/1y6C9zAACEr0sBYMIYk3YpXosnkF3Ak4CEuWJu1-3zXs/edit?usp=sharing > > Bug: v8:11708 > Change-Id: I5aca8f5f24873279271a53be3bb093fc92a1a1eb > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3009224 > Commit-Queue: Dominik Inführ <dinfuehr@chromium.org> > Reviewed-by: Jakob Gruber <jgruber@chromium.org> > Reviewed-by: Michael Lippautz <mlippautz@chromium.org> > Cr-Commit-Position: refs/heads/main@{#77812} Bug: v8:11708, v8:12375, v8:12377 Change-Id: I9d1af6fbc06a3a8b6f216ec5e9027665ad071809 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3283067 Commit-Queue: Dominik Inführ <dinfuehr@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/main@{#78013}
2c88cec4