+static
+void discard_queue(struct urcu_workqueue *queue)
+{
+ struct urcu_worker dummy_worker;
+
+ urcu_worker_init(queue, &dummy_worker);
+ if (!urcu_workqueue_steal_all(queue, &dummy_worker))
+ return;
+ for (;;) {
+ struct urcu_work *work;
+ struct test_work *t;
+
+ work = urcu_dequeue_work(&dummy_worker);
+ if (!work)
+ break;
+ t = caa_container_of(work, struct test_work, w);
+ printf_verbose("discard work %p\n", t);
+ URCU_TLS(nr_discard)++;
+ free(t);
+ }
+}
+