Skip to content

Commit 926b032

Browse files
BillyONeallewissbaker
authored andcommitted
Avoid std::atomic_init deprecated by P0883. (#140)
Resolves #139
1 parent 00b34af commit 926b032

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

include/cppcoro/multi_producer_sequencer.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,11 @@ namespace cppcoro
511511
SEQUENCE seq = initialSequence - (bufferSize - 1);
512512
do
513513
{
514+
#ifdef __cpp_lib_atomic_value_initialization
515+
m_published[seq & m_sequenceMask].store(seq, std::memory_order_relaxed);
516+
#else // ^^^ __cpp_lib_atomic_value_initialization // !__cpp_lib_atomic_value_initialization vvv
514517
std::atomic_init(&m_published[seq & m_sequenceMask], seq);
518+
#endif // !__cpp_lib_atomic_value_initialization
515519
} while (seq++ != initialSequence);
516520
}
517521

lib/cancellation_state.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,13 @@ cppcoro::detail::cancellation_registration_list_chunk::allocate(std::uint32_t en
7979
throw std::bad_alloc{};
8080
}
8181

82-
std::atomic_init(&chunk->m_nextChunk, static_cast<cancellation_registration_list_chunk*>(nullptr));
82+
::new (&chunk->m_nextChunk) std::atomic<cancellation_registration_list_chunk*>(nullptr);
8383
chunk->m_prevChunk = nullptr;
84-
std::atomic_init(&chunk->m_approximateFreeCount, static_cast<std::int32_t>(entryCount - 1));
84+
::new (&chunk->m_approximateFreeCount) std::atomic<int32_t>(static_cast<std::int32_t>(entryCount - 1));
8585
chunk->m_entryCount = entryCount;
8686
for (std::uint32_t i = 0; i < entryCount; ++i)
8787
{
88-
std::atomic_init(&chunk->m_entries[i], static_cast<cancellation_registration*>(nullptr));
88+
::new (&chunk->m_entries[i]) std::atomic<cancellation_registration*>(nullptr);
8989
}
9090

9191
return chunk;
@@ -112,14 +112,15 @@ cppcoro::detail::cancellation_registration_list::allocate()
112112
throw std::bad_alloc{};
113113
}
114114

115-
std::atomic_init(&bucket->m_approximateTail, &bucket->m_headChunk);
116-
std::atomic_init(&bucket->m_headChunk.m_nextChunk, static_cast<cancellation_registration_list_chunk*>(nullptr));
115+
::new (&bucket->m_approximateTail) std::atomic<cancellation_registration_list_chunk*>(&bucket->m_headChunk);
116+
::new (&bucket->m_headChunk.m_nextChunk) std::atomic<cancellation_registration_list_chunk*>(nullptr);
117117
bucket->m_headChunk.m_prevChunk = nullptr;
118-
std::atomic_init(&bucket->m_headChunk.m_approximateFreeCount, static_cast<std::int32_t>(initialChunkSize - 1));
118+
::new (&bucket->m_headChunk.m_approximateFreeCount)
119+
std::atomic<int32_t>(static_cast<std::int32_t>(initialChunkSize - 1));
119120
bucket->m_headChunk.m_entryCount = initialChunkSize;
120121
for (std::uint32_t i = 0; i < initialChunkSize; ++i)
121122
{
122-
std::atomic_init(&bucket->m_headChunk.m_entries[i], static_cast<cancellation_registration*>(nullptr));
123+
::new (&bucket->m_headChunk.m_entries[i]) std::atomic<cancellation_registration*>(nullptr);
123124
}
124125

125126
return bucket;
@@ -158,7 +159,7 @@ cppcoro::detail::cancellation_registration_state::allocate()
158159
state->m_listCount = listCount;
159160
for (std::uint32_t i = 0; i < listCount; ++i)
160161
{
161-
std::atomic_init(&state->m_lists[i], static_cast<cancellation_registration_list*>(nullptr));
162+
::new (&state->m_lists[i]) std::atomic<cancellation_registration_list*>(nullptr);
162163
}
163164

164165
return state;
@@ -187,7 +188,7 @@ cppcoro::detail::cancellation_registration_state::add_registration(
187188
// Pre-claim the first slot.
188189
registration->m_chunk = &newList->m_headChunk;
189190
registration->m_entryIndex = 0;
190-
std::atomic_init(&newList->m_headChunk.m_entries[0], registration);
191+
::new (&newList->m_headChunk.m_entries[0]) std::atomic<cancellation_registration*>(registration);
191192

192193
if (listPtr.compare_exchange_strong(
193194
list,
@@ -305,7 +306,7 @@ cppcoro::detail::cancellation_registration_state::add_registration(
305306
// Pre-allocate first slot.
306307
registration->m_chunk = newChunk;
307308
registration->m_entryIndex = 0;
308-
std::atomic_init(&newChunk->m_entries[0], registration);
309+
::new (&newChunk->m_entries[0]) std::atomic<cancellation_registration*>(registration);
309310

310311
cancellation_registration_list_chunk* oldNext = nullptr;
311312
if (lastChunk->m_nextChunk.compare_exchange_strong(

0 commit comments

Comments
 (0)