[Differential] [Commented On] D1711: Changes to the callout code to restore active semantics and also add a test-framework and test to validate thecallout code (and potentially for use by other tests).
hselasky (Hans Petter Selasky)
phabric-noreply at FreeBSD.org
Wed Feb 4 07:51:06 UTC 2015
hselasky added a comment.
Hi,
There is only one or two likely consumers of callout_init_rw() at the present moment, and one of them is:
./netinet6/nd6.c: canceled = callout_stop(&ln->ln_timer_ch);
./netinet6/nd6.c: canceled = callout_reset(&ln->ln_timer_ch, INT_MAX,
./netinet6/nd6.c: canceled = callout_reset(&ln->ln_timer_ch, tick,
./netinet6/in6.c: callout_init_rw(&lle->base.ln_timer_ch, &lle->base.lle_lock,
hiren: Is this box configured for IPv6 ?
static void
in_lltable_free(struct lltable *llt, struct llentry *lle)
{
LLE_WUNLOCK(lle);
LLE_LOCK_DESTROY(lle);
free(lle, M_LLTABLE);
}
ln_lltable_free() does not drain the callout associated with it and I am not sure if we have a sleeping context for that. Even if the refcount is zero, it doesn't mean that the callback is finished using the RW mutex.
This is another example where we really need a "callout_drain_async_function()".
REVISION DETAIL
https://reviews.freebsd.org/D1711
To: rrs, gnn, rwatson, lstewart, jhb, kostikbel, hselasky, adrian, imp, sbruno
Cc: hiren, jhb, kostikbel, emaste, delphij, neel, erj, freebsd-net
More information about the freebsd-net
mailing list