Re: MTX Lock implementation question

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 4 Mar 2009 10:13:22 -0500
On Wednesday 04 March 2009 7:54:32 am Barney Cordoba wrote:
> 
> Suppose the following:
> 
> Module foo.c
> 
> foo_getlock(sc)
> {
>    FOO_LOCK(sc);
> }
> foo_unlock(sc)
> {
>    FOO_UNLOCK(sc);
> }
> foo_dosomething(sc)
> {
>    MTX_LOCK_ASSERT(sc);
>    foo_dooit();
> }
> 
> Module bar.c
> 
> bar_dofoo()
> {
>    foo_getlock(sc);
>    foo_dosomething(sc);
>    foo_unlock(sc);
> }

This works fine.
 
> Is this something that shouldn't work? I need to access functions
>  that require locks in a different module, but this code barfs on 
> ASSERT with witness enabled. Is this a deflugalty in WITNESS, or do 
> I need to create functions within foo that do the locking? Its been
> working ok for awhile (its not a high volume function) but when I 
> fired up witness to debug something else I encountered witness panics.

You probably have a real bug that WITNESS is warning about however.

-- 
John Baldwin
Received on Wed Mar 04 2009 - 14:14:57 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:43 UTC