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>

next in thread | previous in thread | raw e-mail | index | archive | help
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



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