From 6d5729f73aabf7cf8f25c198aa97fb5c0f76d078 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 19 Nov 2012 22:36:05 -0500 Subject: [PATCH] wfcqueue: document empty criterion Signed-off-by: Mathieu Desnoyers --- urcu/static/wfcqueue.h | 7 +++++++ 1 file changed, 7 insertions(+) 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) -- 2.34.1