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