projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
workqueue: consider "own" item for do_work criterion
[urcu.git]
/
urcu
/
workqueue-fifo.h
diff --git
a/urcu/workqueue-fifo.h
b/urcu/workqueue-fifo.h
index ea6312f8548b28d8c0cf6cef79fb0bec54c1cfd0..a2bbd909fdb1ae3923c8743d155752dceb016802 100644
(file)
--- 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->flags = flags;
urcu_wait_node_init(&worker->wait_node, URCU_WAIT_RUNNING);
worker->own = NULL;
+ worker->wait_node.node.next = NULL;
}
static inline
}
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. */
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))
goto do_work;
/* Try to steal work from sibling instead of blocking */
if (__urcu_steal_work(queue, worker))
This page took
0.025441 seconds
and
4
git commands to generate.