svn commit: r275751 - in head: share/man/man9 sys/kern sys/sys

Chagin Dmitry dchagin at freebsd.org
Sun Dec 14 06:33:52 UTC 2014


On Sat, Dec 13, 2014 at 10:50:11PM +0100, Mateusz Guzik wrote:
> On Sun, Dec 14, 2014 at 12:31:11AM +0300, Chagin Dmitry wrote:
> > On Sat, Dec 13, 2014 at 04:03:47PM -0500, Benjamin Kaduk wrote:
> > > On Sat, Dec 13, 2014 at 4:00 PM, Dmitry Chagin <dchagin at freebsd.org> wrote:
> > > >
> > > > Author: dchagin
> > > > Date: Sat Dec 13 21:00:10 2014
> > > > New Revision: 275751
> > > > URL: https://svnweb.freebsd.org/changeset/base/275751
> > > >
> > > > Log:
> > > >   Add _NEW flag to mtx(9), sx(9), rmlock(9) and rwlock(9).
> > > >   A _NEW flag passed to _init_flags() to avoid check for double-init.
> > > >
> > > >
> > > Can you please say a bit more about why this is desired and what it will be
> > > used for?
> > > 
> > If the kernel has been compiled with INVARIANTS _init() will assert that the
> > lock has not been initialized multiple times. _NEW flag is needed to skip this.
> > as _init() does expect you to zero lock first.
> > it should be used carefully, when you are sure its safe,
> > to avoid bzero'ing lock struct. ugh
> > 
> 
> I think the actual question was when would you call _init_flags and not
> want _NEW and it would have a potential to detect double init.
> 
> I think a better approach would be to have a hash with addresses of all
> locks in use. Then _init/_destroy would add/remove it respectively and
> we would not be dependent on the state of the lock (e.g. struct could be
> zeroed by unrelated code and then double init is not detected).
> 
> Chains locked separately of course.
> 
> I didn't try that, should be totally fine for invariants.
> 
maybe you're right, I think it would be overkill
-- 
Have fun!
chd


More information about the svn-src-all mailing list