stopping callouts

John Baldwin jhb at freebsd.org
Tue Jun 5 19:51:58 UTC 2007


On Monday 04 June 2007 05:39:32 am Artis Caune wrote:
> Sam Leffler wrote:
> > 
> > If you use callout_init_mtx then use callout_stop while holding my_mtx; 
> > if the callout is blocked waiting for my_mtx the request will be 
discarded.
> > 
> > callout_drain should not be called while holding my_mtx because it can 
> > sleep.
> > 
> 
> 
> Thanks,
> than I will use:
> 
> 
> MTX_LOCK;
> ...
> callout_stop();
> MTX_UNLOCK;

During module unload (or device detach) you should still do a callout_drain() 
before destroying the mutex, to make sure softclock() doesn't race with the 
mtx_destroy().

Thus:

foo_detach()
{

	FOO_LOCK(sc);
	foo_stop(sc);
	callout_stop(&sc->callout);
	FOO_UNLOCK(sc);

	bus_teardown_intr(...)

	bus_release_resources(...);

	callout_drain(&sc->callout);
	mtx_destroy(&sc->lock);
}

-- 
John Baldwin


More information about the freebsd-hackers mailing list