Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 09 Jun 2004 10:04:13 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        phk@phk.freebsd.dk
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/kern kern_proc.c 
Message-ID:  <20040609.100413.118633043.imp@bsdimp.com>
In-Reply-To: <53418.1086773585@critter.freebsd.dk>
References:  <200406090929.i599T8h6065944@repoman.freebsd.org> <53418.1086773585@critter.freebsd.dk>

index | next in thread | previous in thread | raw e-mail

In message: <53418.1086773585@critter.freebsd.dk>
            "Poul-Henning Kamp" <phk@phk.freebsd.dk> writes:
: 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);
: 

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.

Warner


home | help

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