30 if (current_head ==
nullptr) {
31 new_tail->
next_ = new_tail;
32 new_tail->
prev_ = new_tail;
36 current_tail->
next_ = new_tail;
37 current_head->
prev_ = new_tail;
38 new_tail->
next_ = current_head;
39 new_tail->
prev_ = current_tail;
77 }
while (cur != original_head);
94 if (cur == original_tail)
break;
112 uint32_t actual_count = 0;
113 while (actual_count <
count) {
114 back_head = back_head->
next_;
116 if (back_head == front_head) {
126 back_head->
prev_ = back_tail;
127 back_tail->
next_ = back_head;
131 front_head->
prev_ = front_tail;
132 front_tail->
next_ = front_head;
143 }
while (cur != head);
155 }
while (cur !=
this);
static void DequeueAllMatchingForAsyncCleanup(WaiterQueueNode **head, const DequeueMatcher &matcher)
void SetNotInListForVerification()
uint32_t NotifyAllInList()
WaiterQueueNode(Isolate *requester)
virtual void SetReadyForAsyncCleanup()=0
std::function< bool(WaiterQueueNode *)> DequeueMatcher
static void Enqueue(WaiterQueueNode **head, WaiterQueueNode *new_tail)
static int LengthFromHead(WaiterQueueNode *head)
virtual ~WaiterQueueNode()
void DequeueUnchecked(WaiterQueueNode **head)
static WaiterQueueNode * Dequeue(WaiterQueueNode **head)
static WaiterQueueNode * DequeueMatching(WaiterQueueNode **head, const DequeueMatcher &matcher)
static WaiterQueueNode * Split(WaiterQueueNode **head, uint32_t count)
#define DCHECK_NOT_NULL(val)
#define DCHECK_GT(v1, v2)