diff --git a/src/shared/queue.c b/src/shared/queue.c
index 3ca3ca6..db4a224 100644
--- a/src/shared/queue.c
+++ b/src/shared/queue.c
entry = queue->head;
if (function) {
- struct queue_entry *prev = NULL;
-
while (entry) {
- if (function(entry->data, user_data)) {
- struct queue_entry *tmp = entry;
-
- if (prev)
- prev->next = entry->next;
- else
- queue->head = entry->next;
-
- if (!entry->next)
- queue->tail = prev;
+ void *data;
- entry = entry->next;
+ data = queue_remove_if(queue, function, user_data);
+ if (!data)
+ break;
- if (destroy)
- destroy(tmp->data);
+ if (destroy)
+ destroy(data);
- free(tmp);
- count++;
- } else {
- prev = entry;
- entry = entry->next;
- }
+ count++;
}
queue->entries -= count;