Skip to content

Commit 00c98c7

Browse files
aamcommit-bot@chromium.org
authored andcommitted
[vm/concurrency] Use relaxed store when updating field list_length_offset.
This is to satisfy TSAN where it sees a data race between updating a field on RecordStore and loading the field for cloning. We already use relaxed stores for Field's guarded_cid updates. Fixes #47188 TEST=ci Change-Id: I37e1aa4fc6ad8682210b3a76886a84673fb062cf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/214861 Reviewed-by: Ryan Macnak <[email protected]> Commit-Queue: Alexander Aprelev <[email protected]>
1 parent d16ad3d commit 00c98c7

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

runtime/vm/object.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10867,8 +10867,9 @@ intptr_t Field::guarded_list_length_in_object_offset() const {
1086710867
void Field::set_guarded_list_length_in_object_offset_unsafe(
1086810868
intptr_t list_length_offset) const {
1086910869
ASSERT(IsOriginal());
10870-
StoreNonPointer(&untag()->guarded_list_length_in_object_offset_,
10871-
static_cast<int8_t>(list_length_offset - kHeapObjectTag));
10870+
StoreNonPointer<int8_t, int8_t, std::memory_order_relaxed>(
10871+
&untag()->guarded_list_length_in_object_offset_,
10872+
static_cast<int8_t>(list_length_offset - kHeapObjectTag));
1087210873
ASSERT(guarded_list_length_in_object_offset() == list_length_offset);
1087310874
}
1087410875

0 commit comments

Comments
 (0)