Core/Networking: Initialize MPSCQueueIntrusive dummy node without undefined behavior

(cherry picked from commit e1289805fc04e75f9e7cba078cbc826ce60f037a)
This commit is contained in:
Shauren
2022-02-04 00:27:11 +01:00
parent 0a1acb9c05
commit 015cee5f27
+4 -4
View File
@@ -95,10 +95,10 @@ class MPSCQueueIntrusive
public:
MPSCQueueIntrusive() : _dummyPtr(reinterpret_cast<T*>(std::addressof(_dummy))), _head(_dummyPtr), _tail(_dummyPtr)
{
T* front = _head.load(std::memory_order_relaxed);
(front->*IntrusiveLink).store(nullptr, std::memory_order_relaxed);
// _dummy is constructed from aligned_storage and is left uninitialized so we init only its Next here
(_dummyPtr->*IntrusiveLink).store(nullptr, std::memory_order_relaxed);
// _dummy is constructed from aligned_storage and is intentionally left uninitialized (it might not be default constructible)
// so we init only its IntrusiveLink here
std::atomic<T*>* dummyNext = new (&(_dummyPtr->*IntrusiveLink)) std::atomic<T*>();
dummyNext->store(nullptr, std::memory_order_relaxed);
}
~MPSCQueueIntrusive()