FreeBSD/sys/netinet/in_mcast.c
/*
 * Discard the IP multicast options (and source filters).  To minimize
 * the amount of work done while holding locks such as the INP's
 * pcbinfo lock (which is used in the receive path), the free
 * operation is performed asynchronously in a separate task.
 *
 * SMPng: NOTE: assumes INP write lock is held.
 */
Discard the IP multicast options (and source filters).  To minimize
the amount of work done while holding locks such as the INP's
pcbinfo lock (which is used in the receive path), the free
operation is performed asynchronously in a separate task.

assumes INP write lock is held.
Discard the IP multicast options ( and source filters ) . To minimize the amount of work done while holding locks such as the INP ' s pcbinfo lock ( which is used in the receive path ) the free operation is performed asynchronously in a separate task . assumes INP write lock is held .
void
inp_freemoptions(struct ip_moptions *imo)
{
	KASSERT(imo != NULL, ("%s: ip_moptions is NULL", __func__));
	IN_MULTI_LOCK();
	STAILQ_INSERT_TAIL(&imo_gc_list, imo, imo_link);
	IN_MULTI_UNLOCK();
	taskqueue_enqueue(taskqueue_thread, &imo_gc_task);
}
void inp_freemoptions ( struct ip_moptions * imo ) { KASSERT ( imo != NULL , ( " " , __func__ ) ) ; IN_MULTI_LOCK ( ) ; STAILQ_INSERT_TAIL ( & imo_gc_list , imo , imo_link ) ; IN_MULTI_UNLOCK ( ) ; taskqueue_enqueue ( taskqueue_thread , & imo_gc_task ) ; }
Discard the IP multicast options (and source filters).
Discard the IP multicast options ( and source filters ) .