tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Bug in mutex_owned() ?



On Sunday 25 October 2009 17:58:55 Mindaugas Rasiukevicius wrote:
> Hans Petter Selasky <hselasky%c2i.net@localhost> wrote:
> > > Yes, it is a comparison.  Which is correct for the purpose.
> >
> > And what is the purpose of that function? Internal only?
>
> It is described in mutex(9).  Purpose is NOT to make locking decisions, but
> for diagnostic checks only.  If some code requires that - it most likely
> has design problems.
>
> > The comparison is right when done by the locking CPU, but if there are
> > two CPU's and the non-locking CPU checks this flag at the same time, it
> > gets a 1 aswell, which is wrong.
>
> True, except it is not wrong.  Purpose of mutex_owned() is to verify that
> current LWP holds the lock, for which it is enough to test that spin-lock
> is generally held.

Ok, I get it. I confused it with mtx_owned() on FreeBSD which I am more used 
to.

> It can test that current CPU holds the lock, but it wont buy you anything,
> because if your context (thus CPU) is not holding the lock, then such test
> is useless - lock state is free to change (e.g. other CPUs can release or
> acquire your lock at the same time).

The test is in-fact useful for more than assertions. Like when implementing 
statements to avoid recursive locking. I disagree that it is purely bad design 
that leads one to require mutex_owned() checks. 

--HPS



Home | Main Index | Thread Index | Old Index