X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=urcu%2Fworkqueue-fifo.h;h=a2bbd909fdb1ae3923c8743d155752dceb016802;hb=0a14cd14bb8de4385c133f5cec3c4ec06f41ee8b;hp=ea6312f8548b28d8c0cf6cef79fb0bec54c1cfd0;hpb=8313fa62c9045e03a3a6a38a10311e6105b69f53;p=urcu.git diff --git a/urcu/workqueue-fifo.h b/urcu/workqueue-fifo.h index ea6312f..a2bbd90 100644 --- a/urcu/workqueue-fifo.h +++ b/urcu/workqueue-fifo.h @@ -139,6 +139,7 @@ void urcu_worker_init(struct urcu_worker *worker, int flags) worker->flags = flags; urcu_wait_node_init(&worker->wait_node, URCU_WAIT_RUNNING); worker->own = NULL; + worker->wait_node.node.next = NULL; } static inline @@ -365,7 +366,8 @@ enum urcu_accept_ret urcu_accept_work(struct urcu_workqueue *queue, has_work = ___urcu_grab_work(worker, &queue->head, &queue->tail, 0); /* Don't wait if we have work to do. */ - if (has_work || !cds_wfcq_empty(&worker->head, &worker->tail)) + if (has_work || worker->own + || !cds_wfcq_empty(&worker->head, &worker->tail)) goto do_work; /* Try to steal work from sibling instead of blocking */ if (__urcu_steal_work(queue, worker))