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>
