From: Mathieu Desnoyers Date: Thu, 23 Oct 2014 18:54:33 +0000 (-0400) Subject: workqueue: fix uninitialized mutex X-Git-Url: http://git.liburcu.org/?p=userspace-rcu.git;a=commitdiff_plain;h=8313fa62c9045e03a3a6a38a10311e6105b69f53 workqueue: fix uninitialized mutex Also, tmp_head don't need to hold space for a lock, since only the local thread is touching it. Signed-off-by: Mathieu Desnoyers --- diff --git a/urcu/workqueue-fifo.h b/urcu/workqueue-fifo.h index 883f41f..ea6312f 100644 --- a/urcu/workqueue-fifo.h +++ b/urcu/workqueue-fifo.h @@ -86,6 +86,7 @@ void urcu_workqueue_init(struct urcu_workqueue *queue) __cds_wfcq_init(&queue->head, &queue->tail); urcu_wait_queue_init(&queue->waitqueue); CDS_INIT_LIST_HEAD(&queue->sibling_head); + pthread_mutex_init(&queue->sibling_lock, NULL); queue->shutdown = false; } @@ -204,7 +205,7 @@ bool ___urcu_grab_work(struct urcu_worker *worker, bool steal) { enum cds_wfcq_ret splice_ret; - struct cds_wfcq_head tmp_head; + struct __cds_wfcq_head tmp_head; struct cds_wfcq_tail tmp_tail; struct cds_wfcq_node *node; @@ -213,7 +214,7 @@ bool ___urcu_grab_work(struct urcu_worker *worker, */ if (cds_wfcq_empty(src_head, src_tail)) return false; - cds_wfcq_init(&tmp_head, &tmp_tail); + __cds_wfcq_init(&tmp_head, &tmp_tail); /* Ensure that we preserve FIFO work order. */ assert(!steal || worker->own == NULL); @@ -254,7 +255,7 @@ got_node: } /* Splice into worker workqueue. */ - splice_ret = cds_wfcq_splice_blocking(&worker->head, + splice_ret = __cds_wfcq_splice_blocking(&worker->head, &worker->tail, &tmp_head, &tmp_tail);