cvs commit: src/sys/kern kern_proc.c

M. Warner Losh imp at bsdimp.com
Wed Jun 9 16:05:42 GMT 2004


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.

Warner


More information about the cvs-src mailing list