void module_reference(module_t mod) { MOD_DPF(REFS, ("module_reference: before, refs=%d\n", mod->refs)); mod->refs++; }
void module_release(module_t mod) { if (mod->refs <= 0) panic("module_release: bad reference count"); MOD_DPF(REFS, ("module_release: before, refs=%d\n", mod->refs)); mod->refs--; if (mod->refs == 0) { TAILQ_REMOVE(&modules, mod, link); if (mod->file) { TAILQ_REMOVE(&mod->file->modules, mod, flink); } free(mod, M_MODULE); } }
/* * module_release() * * Release ref on the module and return the new reference count. If 0 * is returned, the module has been removed from its list and freed. */ int module_release(module_t mod) { int rc; if (mod->refs <= 0) panic("module_release: bad reference count"); MOD_DPF(REFS, ("module_release: before, refs=%d\n", mod->refs)); rc = --mod->refs; if (rc == 0) { TAILQ_REMOVE(&modules, mod, link); if (mod->file) { TAILQ_REMOVE(&mod->file->modules, mod, flink); } kfree(mod, M_MODULE); } return(rc); }