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-src
mailing list