From 59f290ea48d539fa3bb02a0ae71a2153f5e13d9d Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Mon, 25 Nov 2024 18:15:16 +0000 Subject: [PATCH] [vm] Clone forwarder function object with relaxed atomics. TEST=ci BUG=dartbug.com/59594 Change-Id: I8f6b7ee0bb477d1f05cc8baed2b03650888fba5b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/396569 Reviewed-by: Ryan Macnak Commit-Queue: Alexander Aprelev --- runtime/vm/object.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc index f561f852260..0e209406c8f 100644 --- a/runtime/vm/object.cc +++ b/runtime/vm/object.cc @@ -4346,7 +4346,10 @@ FunctionPtr Function::CreateDynamicInvocationForwarder( Zone* zone = thread->zone(); Function& forwarder = Function::Handle(zone); - forwarder ^= Object::Clone(*this, Heap::kOld); + // Load with relaxed atomics to prevent data race with updating original's + // properties that are overridden below for the copy anyway. + forwarder ^= Object::Clone(*this, Heap::kOld, + /*load_with_relaxed_atomics=*/true); forwarder.reset_unboxed_parameters_and_return();