cvs commit: src/sys/kern kern_proc.c

Alexey Dokuchaev danfe at nsu.ru
Wed Jun 9 16:45:30 GMT 2004


On Wed, Jun 09, 2004 at 10:04:13AM -0600, M. Warner Losh wrote:
> In message: <53418.1086773585 at critter.freebsd.dk>
>             "Poul-Henning Kamp" <phk at phk.freebsd.dk> writes:
> : 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);
> : 
> 
> Can you provide a couple of lines about why BAD is BAD and why GOOD
> fixes that flaw?  That should help others from making this mistake in
> the future.

Probably even document in developer's handbook, or some related manpage.

./danfe


More information about the cvs-all mailing list