return;
}
+static void work_queue_item_remove(struct work_queue *wq,
+ struct work_queue_item *item)
+{
+ assert(item && item->data);
+
+ /* call private data deletion callback if needed */
+ if (wq->spec.del_item_data)
+ wq->spec.del_item_data(wq, item->data);
+
+ work_queue_item_dequeue(wq, item);
+
+ work_queue_item_free(item);
+
+ return;
+}
+
/* create new work queue */
struct work_queue *work_queue_new(struct thread_master *m,
const char *queue_name)
if (wq->thread != NULL)
thread_cancel(wq->thread);
+ while (!work_queue_empty(wq)) {
+ struct work_queue_item *item = work_queue_last_item(wq);
+
+ work_queue_item_remove(wq, item);
+ }
+
listnode_delete(work_queues, wq);
XFREE(MTYPE_WORK_QUEUE_NAME, wq->name);
return;
}
-static void work_queue_item_remove(struct work_queue *wq,
- struct work_queue_item *item)
-{
- assert(item && item->data);
-
- /* call private data deletion callback if needed */
- if (wq->spec.del_item_data)
- wq->spec.del_item_data(wq, item->data);
-
- work_queue_item_dequeue(wq, item);
-
- work_queue_item_free(item);
-
- return;
-}
-
static void work_queue_item_requeue(struct work_queue *wq, struct work_queue_item *item)
{
work_queue_item_dequeue(wq, item);