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>