Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 09 Jun 2004 17:25:00 +0100
From:      Doug Rabson <dfr@nlsystems.com>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/kern kern_proc.c
Message-ID:  <1086798299.12306.3.camel@builder02.qubesoft.com>
In-Reply-To: <53418.1086773585@critter.freebsd.dk>
References:  <53418.1086773585@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2004-06-09 at 10:33, Poul-Henning Kamp wrote:
> In message <200406090929.i599T8h6065944@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)?




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1086798299.12306.3.camel>