Fix: don't wait after completion of a work queue job batch
[urcu.git] / src / workqueue.c
index db0c63abf711307e995b3bd5cb372f560bd83711..39d0e077acc101b5e1588c9a1fae954050bd134c 100644 (file)
@@ -221,11 +221,11 @@ static void *workqueue_thread(void *arg)
                        cbcount = 0;
                        __cds_wfcq_for_each_blocking_safe(&cbs_tmp_head,
                                        &cbs_tmp_tail, cbs, cbs_tmp_n) {
-                               struct rcu_head *rhp;
+                               struct urcu_work *uwp;
 
-                               rhp = caa_container_of(cbs,
-                                       struct rcu_head, next);
-                               rhp->func(rhp);
+                               uwp = caa_container_of(cbs,
+                                       struct urcu_work, next);
+                               uwp->func(uwp);
                                cbcount++;
                        }
                        uatomic_sub(&workqueue->qlen, cbcount);
@@ -238,15 +238,12 @@ static void *workqueue_thread(void *arg)
                        if (cds_wfcq_empty(&workqueue->cbs_head,
                                        &workqueue->cbs_tail)) {
                                futex_wait(&workqueue->futex);
-                               (void) poll(NULL, 0, 10);
                                uatomic_dec(&workqueue->futex);
                                /*
                                 * Decrement futex before reading
                                 * urcu_work list.
                                 */
                                cmm_smp_mb();
-                       } else {
-                               (void) poll(NULL, 0, 10);
                        }
                } else {
                        (void) poll(NULL, 0, 10);
This page took 0.022992 seconds and 4 git commands to generate.