tech-kern archive

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

Re: rw_lock_held



> Date: Wed, 7 Feb 2018 14:11:56 +0900
> From: Ryota Ozaki <ozaki-r%netbsd.org@localhost>
> 
> On Wed, Feb 7, 2018 at 2:01 AM, Chuck Silvers <chuq%chuq.com@localhost> wrote:
> > your option (1) sounds fine to me.
> > a better wording for the manpage could be:
> >
> >         Test the lock's condition and return non-zero if the lock is
> >         potentially held by the current LWP and matches the specified
> >         condition.  Otherwise, return zero.
> >
> > thus if we see that lock is held (in write mode) by some other LWP then
> > we know that is not even potentially held by the current LWP.
> 
> I think we don't need "potentially" anymore. And "matches the specified
> condition" is unclear to me (I know it's the original wording). So I prefer
> the following one though it's a bit redundant:
> 
>        rw_write_held() returns non-zero if the lock is held by the current
>        LWP for write.  rw_read_held() returns non-zero if the lock is held
>        by the current LWP for read.  rw_lock_held() returns non-zero if
>        the lock is held by the current LWP for write or read.  Otherwise,
>        these functions return zero.

Fine by me except I would make the last sentence:

   Otherwise, these functions may return zero.
                              ^^^
It is possible for rw_read_held and rw_lock_held to return true even
if the _current_ lwp doesn't hold a read lock as long as _some_ lwp
holds a read lock.  Since these are permissible only for positive
assertions, it is always OK for them to spuriously return true.

We should maybe also introduce rw_write_not_held for handful of cases
in tree that currently say KASSERT(!rw_write_held(...)).


Home | Main Index | Thread Index | Old Index