const Waiter = struct node: std.DoublyLinkedList.Nodeaddress: usizetid: ParkTidthread_status: *std.atomic.Value(Thread.Status)thread_status.cancelation is .parked while the thread is waiting. The single thread which atomically updates it (to .none or .canceling) is responsible for:
Waiter from Bucket.waitersBucket.num_waitersWaiter does not go out of scope while it is still in the Bucket).unpark_flag: if (need_unpark_flag) *UnparkFlag else void17574
17575
17576
17577
17578
17579
17580
17581
17582
17583
17584
17585
17586
17587 const Waiter = struct {
node: std.DoublyLinkedList.Node,
address: usize,
tid: ParkTid,
/// `thread_status.cancelation` is `.parked` while the thread is waiting. The single thread
/// which atomically updates it (to `.none` or `.canceling`) is responsible for:
///
/// * Removing the `Waiter` from `Bucket.waiters`
/// * Decrementing `Bucket.num_waiters`
/// * Unparking the thread (*after* the above, so that the `Waiter` does not go out of scope
/// while it is still in the `Bucket`).
thread_status: *std.atomic.Value(Thread.Status),
unpark_flag: if (need_unpark_flag) *UnparkFlag else void,
}