[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:
Ryan Macnak 2020-03-28 00:41:51 +00:00 committed by commit-bot@chromium.org
parent a32dc76b86
commit e58c3ce1ba

View file

@ -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;