cvs commit: src/sys/kern kern_proc.c

Julian Elischer julian at elischer.org
Wed Jun 9 17:43:50 GMT 2004



On Wed, 9 Jun 2004, Doug Rabson wrote:

> On Wed, 2004-06-09 at 10:33, Poul-Henning Kamp wrote:
> > In message <200406090929.i599T8h6065944 at repoman.freebsd.org>, Poul-Henning Kamp
> >  writes:
> > >
> > >  Modified files:
> > >    sys/kern             kern_proc.c 
> > >  Log:
> > >  Fix a race in destruction of sessions.
> > 
> > Not to pick on anybody, but this is a perfect example of getting locking
> > almost right:
> > 
> > BAD:
> > 
> > 	LOCK(foo->lock)
> > 	foo->refcount--;
> > 	UNLOCK(foo->lock)
> > 	if (foo->refcount == 0)
> > 		destroy(foo);
> > 
> > GOOD:
> > 
> > 	LOCK(foo->lock)
> > 	i = --foo->refcount;
> > 	UNLOCK(foo->lock)
> > 	if (i == 0)
> > 		destroy(foo);
> 
> Isn't there still a race in the GOOD case here if somone takes a new
> reference, incrementing refcount after the UNLOCK(foo->lock)?

if you had the only reference, then how didi the other party get it?

> 
> 
> 



More information about the cvs-src mailing list