Diff between 5d3ac6da5a0e8aebe3cf4ab5b403c5c9ca267e73 and fe7d07fadd83a3e8a19498e9c955a3500b56de83

Changed Files

File Additions Deletions Status
src/shared/queue.c +7 -21 modified

Full Patch

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
@@ -312,31 +312,17 @@ unsigned int queue_remove_all(struct queue *queue, queue_match_func_t function,
 	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;