wfqueue: provide API for caller-locked dequeue
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sun, 22 Aug 2010 12:44:41 +0000 (08:44 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sun, 22 Aug 2010 12:44:41 +0000 (08:44 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
urcu/wfqueue-static.h
urcu/wfqueue.h
wfqueue.c

index 8a4a7fd8e2017d405f43e1b59de86dafb9ec4c99..0f7e68f7a40fea14b208708ae9bd7425b79d35b2 100644 (file)
@@ -91,7 +91,7 @@ void _wfq_enqueue(struct wfq_queue *q, struct wfq_node *node)
  * enqueue.
  */
 struct wfq_node *
-__wfq_dequeue_blocking(struct wfq_queue *q)
+___wfq_dequeue_blocking(struct wfq_queue *q)
 {
        struct wfq_node *node, *next;
        int attempt = 0;
@@ -123,7 +123,7 @@ __wfq_dequeue_blocking(struct wfq_queue *q)
        if (node == &q->dummy) {
                _wfq_node_init(node);
                _wfq_enqueue(q, node);
-               return __wfq_dequeue_blocking(q);
+               return ___wfq_dequeue_blocking(q);
        }
        return node;
 }
@@ -136,7 +136,7 @@ _wfq_dequeue_blocking(struct wfq_queue *q)
 
        ret = pthread_mutex_lock(&q->lock);
        assert(!ret);
-       retnode = __wfq_dequeue_blocking(q);
+       retnode = ___wfq_dequeue_blocking(q);
        ret = pthread_mutex_unlock(&q->lock);
        assert(!ret);
        return retnode;
index 3d32b05c580c4634fd98a373cf86514228d3adba..5dc64f190def7aca0281bcc8ddaa738c477999df 100644 (file)
@@ -57,6 +57,7 @@ struct wfq_queue {
 #define wfq_node_init          _wfq_node_init
 #define wfq_init               _wfq_init
 #define wfq_enqueue            _wfq_enqueue
+#define __wfq_dequeue_blocking ___wfq_dequeue_blocking
 #define wfq_dequeue_blocking   _wfq_dequeue_blocking
 
 #else /* !_LGPL_SOURCE */
@@ -64,6 +65,8 @@ struct wfq_queue {
 extern void wfq_node_init(struct wfq_node *node);
 extern void wfq_init(struct wfq_queue *q);
 extern void wfq_enqueue(struct wfq_queue *q, struct wfq_node *node);
+/* __wfq_dequeue_blocking: caller ensures mutual exclusion between dequeues */
+extern struct wfq_node *__wfq_dequeue_blocking(struct wfq_queue *q);
 extern struct wfq_node *wfq_dequeue_blocking(struct wfq_queue *q);
 
 #endif /* !_LGPL_SOURCE */
index d22aa7cfe9a0a754fc5e7f05d9d32bc9ff00492e..182b4a427ca9886f0ac64c924ccd3c21565103ce 100644 (file)
--- a/wfqueue.c
+++ b/wfqueue.c
@@ -43,6 +43,11 @@ void wfq_enqueue(struct wfq_queue *q, struct wfq_node *node)
        _wfq_enqueue(q, node);
 }
 
+struct wfq_node *__wfq_dequeue_blocking(struct wfq_queue *q)
+{
+       return ___wfq_dequeue_blocking(q);
+}
+
 struct wfq_node *wfq_dequeue_blocking(struct wfq_queue *q)
 {
        return _wfq_dequeue_blocking(q);
This page took 0.028383 seconds and 4 git commands to generate.