void queue_foreach(struct queue *queue, queue_foreach_func_t function, void *user_data) { struct queue_entry *entry; if (!queue || !function) return; entry = queue->head; if (!entry) return; queue_ref(queue); while (entry && queue->head && queue->ref_count > 1) { struct queue_entry *next; queue_entry_ref(entry); function(entry->data, user_data); next = entry->next; queue_entry_unref(entry); entry = next; } queue_unref(queue); }
void queue_foreach(struct queue *queue, queue_foreach_func_t function, void *user_data) { struct queue_entry *entry; if (!queue || !function) return; entry = queue->head; if (!entry) return; queue_ref(queue); while (entry && queue->ref_count > 1) { struct queue_entry *tmp = entry; entry = tmp->next; function(tmp->data, user_data); if (!queue_find_entry(queue, entry)) break; } queue_unref(queue); }
void queue_destroy(struct queue *queue, queue_destroy_func_t destroy) { if (!queue) return; queue_remove_all(queue, NULL, NULL, destroy); queue_unref(queue); }