mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 04:41:11 +00:00
Bug 1894147 - Fix C++20 std::memory_order build errors in MPSCQueue.h. r=xpcom-reviewers,emilio
C++20 renamed the `std::memory_order::memory_order_*` enum constants to `std::memory_order::*`. https://en.cppreference.com/w/cpp/atomic/memory_order C++17 supports: `std::memory_order_relaxed` `std::memory_order::memory_order_relaxed` But C++20 supports: `std::memory_order_relaxed` `std::memory_order::memory_order::relaxed` Thus, `std::memory_order_relaxed` is the only shared name if we want to support compiling Firefox with -std=c++17 and -std=c++20 as we transition mozilla-central from C++17 to C++20. Differential Revision: https://phabricator.services.mozilla.com/D208963
This commit is contained in:
parent
ab9ee3940a
commit
2d846b7c8c
@ -231,8 +231,7 @@ class MPSCRingBufferBase {
|
||||
* empty queue
|
||||
* */
|
||||
void MarkSlot(std::atomic<uint64_t>& aSlotStatus, uint64_t aIndex) {
|
||||
uint64_t current =
|
||||
aSlotStatus.load(std::memory_order::memory_order_relaxed);
|
||||
uint64_t current = aSlotStatus.load(std::memory_order_relaxed);
|
||||
do {
|
||||
// Attempts to find a slot that is available to enqueue, without
|
||||
// cross-thread synchronization
|
||||
@ -269,9 +268,9 @@ class MPSCRingBufferBase {
|
||||
//
|
||||
// In case of failure we require memory_order_relaxed for the load
|
||||
// operation because we dont need synchronization at that point.
|
||||
if (aSlotStatus.compare_exchange_weak(
|
||||
current, modified, std::memory_order::memory_order_release,
|
||||
std::memory_order::memory_order_relaxed)) {
|
||||
if (aSlotStatus.compare_exchange_weak(current, modified,
|
||||
std::memory_order_release,
|
||||
std::memory_order_relaxed)) {
|
||||
if constexpr (MPSC_DEBUG) {
|
||||
fprintf(stderr,
|
||||
"[enqueue] modified=0x%" PRIx64 " => index=%" PRIu64 "\n",
|
||||
@ -297,8 +296,7 @@ class MPSCRingBufferBase {
|
||||
* */
|
||||
[[nodiscard]] std::optional<uint64_t> UnmarkSlot(
|
||||
std::atomic<uint64_t>& aSlotStatus) {
|
||||
uint64_t current =
|
||||
aSlotStatus.load(std::memory_order::memory_order_relaxed);
|
||||
uint64_t current = aSlotStatus.load(std::memory_order_relaxed);
|
||||
do {
|
||||
uint64_t index = current & mMask;
|
||||
if (index == 0) {
|
||||
@ -318,9 +316,9 @@ class MPSCRingBufferBase {
|
||||
//
|
||||
// In case of failure we require memory_order_relaxed for the load
|
||||
// operation because we dont need synchronization at that point.
|
||||
if (aSlotStatus.compare_exchange_weak(
|
||||
current, modified, std::memory_order::memory_order_acquire,
|
||||
std::memory_order::memory_order_relaxed)) {
|
||||
if (aSlotStatus.compare_exchange_weak(current, modified,
|
||||
std::memory_order_acquire,
|
||||
std::memory_order_relaxed)) {
|
||||
if constexpr (MPSC_DEBUG) {
|
||||
fprintf(stderr,
|
||||
"[dequeue] current=0x%" PRIx64 " => index=%" PRIu64 "\n",
|
||||
|
Loading…
Reference in New Issue
Block a user