Optionally consider RemoteAllocator heads Tame

This commit is contained in:
Nathaniel Wesley Filardo
2021-10-12 02:11:57 +01:00
committed by Nathaniel Wesley Filardo
parent 96155db640
commit 97950a9fca
4 changed files with 81 additions and 10 deletions

View File

@@ -424,7 +424,24 @@ namespace snmalloc
auto& entry = SharedStateHandle::Pagemap::get_metaentry(
local_state, snmalloc::address_cast(p));
auto r = message_queue().dequeue(key_global, domesticate);
std::pair<freelist::HeadPtr, bool> r;
if constexpr (SharedStateHandle::Options.QueueHeadsAreTame)
{
/*
* The front of the queue has already been validated; just change the
* annotating type.
*/
auto domesticate_first = [](freelist::QueuePtr p)
SNMALLOC_FAST_PATH_LAMBDA {
return freelist::HeadPtr(p.unsafe_ptr());
};
r =
message_queue().dequeue(key_global, domesticate_first, domesticate);
}
else
{
r = message_queue().dequeue(key_global, domesticate, domesticate);
}
if (unlikely(!r.second))
break;