mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 21:50:11 +00:00
[vm/reload] Fix how isolate group source loaded_blobs are visited.
loaded_blobs need to be visited as part of IsolateGroup::Visit method rather than Isolate::Visit one. Before this change loaded_blobs could become corrupted because GC requires objects being visited only once during collection cycles. Fixes https://github.com/flutter/flutter/issues/89406 TEST=ci, flutter Change-Id: Ic61498c205c5cc072e5f45928264a507a7752e0d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212440 Commit-Queue: Alexander Aprelev <aam@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
This commit is contained in:
parent
29ba68fcf2
commit
5ccf97a5a9
|
@ -2681,12 +2681,6 @@ void Isolate::VisitObjectPointers(ObjectPointerVisitor* visitor,
|
|||
visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&ic_miss_code_));
|
||||
visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&tag_table_));
|
||||
visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&sticky_error_));
|
||||
if (isolate_group_ != nullptr) {
|
||||
if (isolate_group_->source()->loaded_blobs_ != nullptr) {
|
||||
visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(
|
||||
&(isolate_group_->source()->loaded_blobs_)));
|
||||
}
|
||||
}
|
||||
#if !defined(PRODUCT)
|
||||
visitor->VisitPointer(
|
||||
reinterpret_cast<ObjectPtr*>(&pending_service_extension_calls_));
|
||||
|
@ -2889,6 +2883,11 @@ void IsolateGroup::VisitSharedPointers(ObjectPointerVisitor* visitor) {
|
|||
visitor);
|
||||
}
|
||||
#endif // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
|
||||
if (source()->loaded_blobs_ != nullptr) {
|
||||
visitor->VisitPointer(
|
||||
reinterpret_cast<ObjectPtr*>(&(source()->loaded_blobs_)));
|
||||
}
|
||||
}
|
||||
|
||||
void IsolateGroup::VisitStackPointers(ObjectPointerVisitor* visitor,
|
||||
|
|
Loading…
Reference in a new issue