|
@@ -163,23 +163,23 @@ DataBuffer *queue_t::pop(bool block)
|
|
unsigned signalFreeSlots = 0;
|
|
unsigned signalFreeSlots = 0;
|
|
{
|
|
{
|
|
CriticalBlock b(c_region);
|
|
CriticalBlock b(c_region);
|
|
- if (!count)
|
|
|
|
|
|
+ if (unlikely(!count))
|
|
return nullptr;
|
|
return nullptr;
|
|
count--;
|
|
count--;
|
|
ret = head;
|
|
ret = head;
|
|
- head = head->msgNext;
|
|
|
|
|
|
+ head = ret->msgNext;
|
|
if (!head)
|
|
if (!head)
|
|
{
|
|
{
|
|
assert(!count);
|
|
assert(!count);
|
|
tail = nullptr;
|
|
tail = nullptr;
|
|
}
|
|
}
|
|
- ret->msgNext = nullptr;
|
|
|
|
if (count < limit && signal_free_sl)
|
|
if (count < limit && signal_free_sl)
|
|
{
|
|
{
|
|
signal_free_sl--;
|
|
signal_free_sl--;
|
|
signalFreeSlots++;
|
|
signalFreeSlots++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ ret->msgNext = nullptr;
|
|
if (signalFreeSlots)
|
|
if (signalFreeSlots)
|
|
free_sl.signal(signalFreeSlots);
|
|
free_sl.signal(signalFreeSlots);
|
|
return ret;
|
|
return ret;
|