示例#1
0
void list_free_node(list_node_t *node, list_free_data_fn *free_data_fn)
{
	if (node) {
		if (free_data_fn)
			free_data_fn(node->data);
		free(node);
	}
}
示例#2
0
void
stack_clear(struct stack *s, void (*free_data_fn)(void *))
{
    if (s == NULL) {
        return;
    }
    if (free_data_fn) {
        while (s->sp > 0) {
            free_data_fn(s->array[--(s->sp)]);
        }
    }
}
示例#3
0
void free_spin_lock_queue(sl_queue_t* q, void(*free_data_fn(void*))) {
	sl_queue_node_t* it;
	void *data;

	spin_lock_bh(&(q->queue_lock));
	it = q->first;
	while (it != NULL) {
		q->first = q->first->next;
		data = free_spin_lock_queue_node(it);
		if (data && free_data_fn) {
			free_data_fn(data);
		} else if (data)
			kfree(data);
		it = q->first;
	}
	spin_unlock_bh(&(q->queue_lock));
	kfree(q);
}