void hash_destroy(struct hash *h) { for(size_t index = 0;index < h->length;index++) { if(h->table[index]) linkedlist_destroy(h->table[index]); } kfree(h->table); mutex_destroy(&h->lock); KOBJ_DESTROY(h, HASH_ALLOC); }
void mutex_destroy(struct mutex *m) { assert(m->magic == MUTEX_MAGIC); if(kernel_state_flags & KSF_SHUTDOWN) return; if(m->lock && current_thread && m->owner == current_thread) current_thread->held_locks--; m->magic = 0; atomic_store(&m->lock, false); blocklist_destroy(&m->blocklist); KOBJ_DESTROY(m, MT_ALLOC); }
void net_packet_destroy(struct net_packet *packet) { assert(packet->count == 0); TRACE_MSG("net.packet", "destroying packet %x\n", packet); KOBJ_DESTROY(packet, NP_FLAG_ALLOC); }
void charbuffer_destroy(struct charbuffer *cb) { KOBJ_DESTROY(cb, CHARBUFFER_ALLOC); }
void ticker_destroy(struct ticker *ticker) { heap_destroy(&ticker->heap); spinlock_destroy(&ticker->lock); KOBJ_DESTROY(ticker, TICKER_KMALLOC); }
void workqueue_destroy(struct workqueue *wq) { heap_destroy(&wq->tasks); spinlock_destroy(&wq->lock); KOBJ_DESTROY(wq, WORKQUEUE_KMALLOC); }
void stack_destroy(struct stack *stack) { spinlock_destroy(&stack->lock); KOBJ_DESTROY(stack, STACK_KMALLOC); }