summaryrefslogtreecommitdiffstats
path: root/vespamalloc/src/vespamalloc/malloc/allocchunk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vespamalloc/src/vespamalloc/malloc/allocchunk.cpp')
-rw-r--r--vespamalloc/src/vespamalloc/malloc/allocchunk.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/vespamalloc/src/vespamalloc/malloc/allocchunk.cpp b/vespamalloc/src/vespamalloc/malloc/allocchunk.cpp
index f9cb104169a..12f680bac88 100644
--- a/vespamalloc/src/vespamalloc/malloc/allocchunk.cpp
+++ b/vespamalloc/src/vespamalloc/malloc/allocchunk.cpp
@@ -4,35 +4,35 @@
namespace vespamalloc {
-void AFListBase::linkInList(HeadPtr & head, AFListBase * list)
+void AFListBase::linkInList(AtomicHeadPtr & head, AFListBase * list)
{
AFListBase * tail;
for (tail = list; tail->_next != NULL ;tail = tail->_next) { }
linkIn(head, list, tail);
}
-void AFListBase::linkIn(HeadPtr & head, AFListBase * csl, AFListBase * tail)
+void AFListBase::linkIn(AtomicHeadPtr & head, AFListBase * csl, AFListBase * tail)
{
- HeadPtr oldHead = head;
+ HeadPtr oldHead = head.load(std::memory_order_relaxed);
HeadPtr newHead(csl, oldHead._tag + 1);
tail->_next = static_cast<AFListBase *>(oldHead._ptr);
- while ( ! Atomic::cmpSwap(&head, newHead, oldHead) ) {
- oldHead = head;
+ while ( ! head.compare_exchange_weak(oldHead, newHead, std::memory_order_release, std::memory_order_relaxed) ) {
+ oldHead = head.load(std::memory_order_relaxed);
newHead._tag = oldHead._tag + 1;
tail->_next = static_cast<AFListBase *>(oldHead._ptr);
}
}
-AFListBase * AFListBase::linkOut(HeadPtr & head)
+AFListBase * AFListBase::linkOut(AtomicHeadPtr & head)
{
- HeadPtr oldHead = head;
+ HeadPtr oldHead = head.load(std::memory_order_relaxed);
AFListBase *csl = static_cast<AFListBase *>(oldHead._ptr);
if (csl == NULL) {
return NULL;
}
HeadPtr newHead(csl->_next, oldHead._tag + 1);
- while ( ! Atomic::cmpSwap(&head, newHead, oldHead) ) {
- oldHead = head;
+ while ( ! head.compare_exchange_weak(oldHead, newHead, std::memory_order_release, std::memory_order_relaxed) ) {
+ oldHead = head.load(std::memory_order_relaxed);
csl = static_cast<AFListBase *>(oldHead._ptr);
if (csl == NULL) {
return NULL;