mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:19:47 +00:00
[vm] Fix some data races with profiler samples.
- Sample collection must acquire or there is a write-write data race with sample processing/clearing. - Sample processing must release or there is a write-write data race with another sample processing. Bug: https://github.com/dart-lang/sdk/issues/41242 Change-Id: I57c1f813fc8b38d31e12dd8d7d3b19d96a9c8912 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141466 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
parent
a32dc76b86
commit
e58c3ce1ba
|
@ -48,7 +48,7 @@ class ThreadInterrupter : public AllStatic {
|
|||
}
|
||||
new_value = old_value + 1;
|
||||
} while (!sample_buffer_lock_.compare_exchange_weak(
|
||||
old_value, new_value, std::memory_order_relaxed));
|
||||
old_value, new_value, std::memory_order_acquire));
|
||||
entered_lock_ = true;
|
||||
}
|
||||
|
||||
|
@ -138,7 +138,7 @@ class ThreadInterrupter : public AllStatic {
|
|||
ASSERT(old_value < 0);
|
||||
new_value = old_value + 1;
|
||||
} while (!sample_buffer_lock_.compare_exchange_weak(
|
||||
old_value, new_value, std::memory_order_relaxed));
|
||||
old_value, new_value, std::memory_order_release));
|
||||
}
|
||||
|
||||
friend class ThreadInterrupterVisitIsolates;
|
||||
|
|
Loading…
Reference in a new issue