From: Mathieu Desnoyers Date: Tue, 20 Nov 2012 03:36:05 +0000 (-0500) Subject: wfcqueue: document empty criterion X-Git-Tag: v0.8.0~148 X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=commitdiff_plain;h=6d5729f73aabf7cf8f25c198aa97fb5c0f76d078 wfcqueue: document empty criterion Signed-off-by: Mathieu Desnoyers --- diff --git a/urcu/static/wfcqueue.h b/urcu/static/wfcqueue.h index 1200227..8774c03 100644 --- a/urcu/static/wfcqueue.h +++ b/urcu/static/wfcqueue.h @@ -95,6 +95,13 @@ static inline void _cds_wfcq_init(struct cds_wfcq_head *head, * cds_wfcq_empty: return whether wait-free queue is empty. * * No memory barrier is issued. No mutual exclusion is required. + * + * We perform the test on head->node.next to check if the queue is + * possibly empty, but we confirm this by checking if the tail pointer + * points to the head node because the tail pointer is the linearisation + * point of the enqueuers. Just checking the head next pointer could + * make a queue appear empty if an enqueuer is preempted for a long time + * between xchg() and setting the previous node's next pointer. */ static inline bool _cds_wfcq_empty(struct cds_wfcq_head *head, struct cds_wfcq_tail *tail)