FreeBSD/sys/net/if_llatbl.c
/*
 * Free all entries from given table and free itself.
 */
Free all entries from given table and free itself.
Free all entries from given table and free itself .
void
lltable_free(struct lltable *llt)
{
	struct llentry *lle, *next;
	struct llentries dchain;
	KASSERT(llt != NULL, ("%s: llt is NULL", __func__));
	lltable_unlink(llt);
	LIST_INIT(&dchain);
	IF_AFDATA_WLOCK(llt->llt_ifp);
	lltable_foreach_lle(llt, lltable_free_cb, &dchain);
	llentries_unlink(llt, &dchain);
	IF_AFDATA_WUNLOCK(llt->llt_ifp);
	LIST_FOREACH_SAFE(lle, &dchain, lle_chain, next) {
		if (callout_stop(&lle->lle_timer) > 0)
			LLE_REMREF(lle);
		llentry_free(lle);
	}
	llt->llt_free_tbl(llt);
}
void lltable_free ( struct lltable * llt ) { struct llentry * lle , * next ; struct llentries dchain ; KASSERT ( llt != NULL , ( " " , __func__ ) ) ; lltable_unlink ( llt ) ; LIST_INIT ( & dchain ) ; IF_AFDATA_WLOCK ( llt -> llt_ifp ) ; lltable_foreach_lle ( llt , lltable_free_cb , & dchain ) ; llentries_unlink ( llt , & dchain ) ; IF_AFDATA_WUNLOCK ( llt -> llt_ifp ) ; LIST_FOREACH_SAFE ( lle , & dchain , lle_chain , next ) { if ( callout_stop ( & lle -> lle_timer ) > 0 ) LLE_REMREF ( lle ) ; llentry_free ( lle ) ; } llt -> llt_free_tbl ( llt ) ; }
Free all entries from given table and free itself.
Free all entries from given table and free itself .
/* Push all lles to @dchain */