From owner-cvs-src@FreeBSD.ORG Wed Jun 9 16:29:51 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 882E016A4CE; Wed, 9 Jun 2004 16:29:51 +0000 (GMT) Received: from khavrinen.lcs.mit.edu (khavrinen.lcs.mit.edu [128.30.28.20]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3F47643D45; Wed, 9 Jun 2004 16:29:51 +0000 (GMT) (envelope-from wollman@khavrinen.lcs.mit.edu) Received: from khavrinen.lcs.mit.edu (localhost [IPv6:::1]) by khavrinen.lcs.mit.edu (8.12.9/8.12.9) with ESMTP id i59GTnkP052626 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK CN=khavrinen.lcs.mit.edu issuer=SSL+20Client+20CA); Wed, 9 Jun 2004 12:29:50 -0400 (EDT) (envelope-from wollman@khavrinen.lcs.mit.edu) Received: (from wollman@localhost) by khavrinen.lcs.mit.edu (8.12.9/8.12.9/Submit) id i59GTnCx052623; Wed, 9 Jun 2004 12:29:49 -0400 (EDT) (envelope-from wollman) Date: Wed, 9 Jun 2004 12:29:49 -0400 (EDT) From: Garrett Wollman Message-Id: <200406091629.i59GTnCx052623@khavrinen.lcs.mit.edu> To: "Poul-Henning Kamp" In-Reply-To: <55929.1086798000@critter.freebsd.dk> References: <20040609.100413.118633043.imp@bsdimp.com> <55929.1086798000@critter.freebsd.dk> X-Spam-Score: -19.8 () IN_REP_TO,QUOTED_EMAIL_TEXT,REFERENCES,REPLY_WITH_QUOTES X-Scanned-By: MIMEDefang 2.37 cc: cvs-src@FreeBSD.ORG cc: src-committers@FreeBSD.ORG cc: cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/sys/kern kern_proc.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Jun 2004 16:29:51 -0000 < said: > The way to fix this is to make sure that the test for zero-ness > is done on the result of our own decrement operation: > LOCK(foo->lock) > i = --foo->refcount; > UNLOCK(foo->lock) > if (i == 0) > destroy(foo); I think it's clearer if you write: LOCK(foo->lock); if (--foo->refcount == 0) destroy(foo); /* expects a locked foo */ else UNLOCK(foo); ...and also a bit harder to mess up in maintenance (particularly if destroy() asserts that the lock is held). -GAWollman