ab6eb9332f
The mutator thread structure is kept alive until the death of the isolate. Yet the mutator thread does not have to be scheduled all the time. A native call, for example, can suspend the isolate via Dart_ExitIsolate to perform other work. This particular flaky crash had precisely this problem: The mutator thread suspended itself with an IsolateSaver scope (which uses Dart_ExitIsolate) and invoked Dart_NewNativePort. While at the same time the background compiler for that isolate triggered an oldspace allocation, which triggered a marking task. The marker task needs to traverses the mutator stack and hits a frame with a deoptimization marker, which causes it to access the mutator thread's isolate pointer, which was incorrectly NULL. Fixes https://github.com/dart-lang/sdk/issues/34748 Fixes https://github.com/dart-lang/sdk/issues/34323 Change-Id: I80440856f72b3c194a516084ddc254b2e56740d8 Reviewed-on: https://dart-review.googlesource.com/c/80860 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>