From c7ba06ba1bd70d77a6530503cf216d3a9878d672 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 5 Dec 2012 09:01:21 -0500 Subject: [PATCH] wfstack API: rename cds_wfs_first_blocking to cds_wfs_first cds_wfs_first never needs to block. This operation can be used to check if the stack returned by pop_all is empty or not, so it is quite interesting to have a fully non-blocking semantic for all of enqueue/pop_all/first operations. Only cds_wfs_next may block. Signed-off-by: Mathieu Desnoyers --- tests/test_urcu_wfs.c | 2 +- urcu/static/wfstack.h | 4 ++-- urcu/wfstack.h | 10 +++++----- wfstack.c | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/test_urcu_wfs.c b/tests/test_urcu_wfs.c index 1c852b9..ec9e198 100644 --- a/tests/test_urcu_wfs.c +++ b/tests/test_urcu_wfs.c @@ -256,7 +256,7 @@ static void do_test_pop_all(enum test_sync sync) cds_wfs_pop_unlock(&s); /* Check if empty */ - if (cds_wfs_first_blocking(head) == NULL) + if (cds_wfs_first(head) == NULL) return; URCU_TLS(nr_pop_all)++; diff --git a/urcu/static/wfstack.h b/urcu/static/wfstack.h index 1a0e4d7..18bf763 100644 --- a/urcu/static/wfstack.h +++ b/urcu/static/wfstack.h @@ -283,7 +283,7 @@ _cds_wfs_pop_all_blocking(struct cds_wfs_stack *s) } /* - * cds_wfs_first_blocking: get first node of a popped stack. + * cds_wfs_first: get first node of a popped stack. * * Content written into the node before enqueue is guaranteed to be * consistent, but no other memory ordering is ensured. @@ -295,7 +295,7 @@ _cds_wfs_pop_all_blocking(struct cds_wfs_stack *s) * Returns NULL if popped stack is empty, top stack node otherwise. */ static inline struct cds_wfs_node * -_cds_wfs_first_blocking(struct cds_wfs_head *head) +_cds_wfs_first(struct cds_wfs_head *head) { if (___cds_wfs_end(head)) return NULL; diff --git a/urcu/wfstack.h b/urcu/wfstack.h index 20d1882..0adf392 100644 --- a/urcu/wfstack.h +++ b/urcu/wfstack.h @@ -98,7 +98,7 @@ struct cds_wfs_stack { * For iteration on cds_wfs_head returned by __cds_wfs_pop_all or * cds_wfs_pop_all_blocking. */ -#define cds_wfs_first_blocking _cds_wfs_first_blocking +#define cds_wfs_first _cds_wfs_first #define cds_wfs_next_blocking _cds_wfs_next_blocking /* Pop locking with internal mutex */ @@ -154,7 +154,7 @@ extern struct cds_wfs_node *cds_wfs_pop_blocking(struct cds_wfs_stack *s); extern struct cds_wfs_head *cds_wfs_pop_all_blocking(struct cds_wfs_stack *s); /* - * cds_wfs_first_blocking: get first node of a popped stack. + * cds_wfs_first: get first node of a popped stack. * * Content written into the node before enqueue is guaranteed to be * consistent, but no other memory ordering is ensured. @@ -165,7 +165,7 @@ extern struct cds_wfs_head *cds_wfs_pop_all_blocking(struct cds_wfs_stack *s); * * Returns NULL if popped stack is empty, top stack node otherwise. */ -extern struct cds_wfs_node *cds_wfs_first_blocking(struct cds_wfs_head *head); +extern struct cds_wfs_node *cds_wfs_first(struct cds_wfs_head *head); /* * cds_wfs_next_blocking: get next node of a popped stack. @@ -245,7 +245,7 @@ extern struct cds_wfs_head *__cds_wfs_pop_all(struct cds_wfs_stack *s); * consistent, but no other memory ordering is ensured. */ #define cds_wfs_for_each_blocking(head, node) \ - for (node = cds_wfs_first_blocking(head); \ + for (node = cds_wfs_first(head); \ node != NULL; \ node = cds_wfs_next_blocking(node)) @@ -261,7 +261,7 @@ extern struct cds_wfs_head *__cds_wfs_pop_all(struct cds_wfs_stack *s); * consistent, but no other memory ordering is ensured. */ #define cds_wfs_for_each_blocking_safe(head, node, n) \ - for (node = cds_wfs_first_blocking(head), \ + for (node = cds_wfs_first(head), \ n = (node ? cds_wfs_next_blocking(node) : NULL); \ node != NULL; \ node = n, n = (node ? cds_wfs_next_blocking(node) : NULL)) diff --git a/wfstack.c b/wfstack.c index 6d41f89..f0bae57 100644 --- a/wfstack.c +++ b/wfstack.c @@ -58,9 +58,9 @@ struct cds_wfs_head *cds_wfs_pop_all_blocking(struct cds_wfs_stack *s) return _cds_wfs_pop_all_blocking(s); } -struct cds_wfs_node *cds_wfs_first_blocking(struct cds_wfs_head *head) +struct cds_wfs_node *cds_wfs_first(struct cds_wfs_head *head) { - return _cds_wfs_first_blocking(head); + return _cds_wfs_first(head); } struct cds_wfs_node *cds_wfs_next_blocking(struct cds_wfs_node *node) -- 2.34.1