From owner-freebsd-hackers Sun Dec 17 13:56:56 2000 From owner-freebsd-hackers@FreeBSD.ORG Sun Dec 17 13:56:52 2000 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from gw.nectar.com (gw.nectar.com [208.42.49.153]) by hub.freebsd.org (Postfix) with ESMTP id 76DDE37B400 for ; Sun, 17 Dec 2000 13:56:52 -0800 (PST) Received: from hamlet.nectar.com (hamlet.nectar.com [10.0.1.102]) by gw.nectar.com (Postfix) with ESMTP id 64A49193E1; Sun, 17 Dec 2000 15:56:48 -0600 (CST) Received: (from nectar@localhost) by hamlet.nectar.com (8.11.1/8.9.3) id eBHLumm63172; Sun, 17 Dec 2000 15:56:48 -0600 (CST) (envelope-from nectar@spawn.nectar.com) Date: Sun, 17 Dec 2000 15:56:48 -0600 From: "Jacques A. Vidrine" To: Chris Costello Cc: hackers@FreeBSD.ORG Subject: Re: Why not another style thread? (was Re: cvs commit: src/lib/libc/gen getgrent.c) Message-ID: <20001217155648.C63080@hamlet.nectar.com> References: <200012172110.eBHLAfU46563@freefall.freebsd.org> <20001217151509.A63051@hamlet.nectar.com> <20001217151735.D54486@holly.calldei.com> <20001217153129.B63080@hamlet.nectar.com> <20001217153656.F54486@holly.calldei.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20001217153656.F54486@holly.calldei.com>; from chris@calldei.com on Sun, Dec 17, 2000 at 03:36:56PM -0600 X-Url: http://www.nectar.com/ Sender: nectar@nectar.com Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Sun, Dec 17, 2000 at 03:36:56PM -0600, Chris Costello wrote: > On Sunday, December 17, 2000, Jacques A. Vidrine wrote: > > It would be silly to optimize for freeing NULL pointers. > > You mean as seen in: [snip ifree(), which checks for a NULL pointer, first thing] > called by free(): > > void > free(void *ptr) > { > THREAD_LOCK(); > malloc_func = " in free():"; > if (malloc_active++) { > wrtwarning("recursive call.\n"); > malloc_active--; > return; > } else { > ifree(ptr); > . > . > . > > That's how it's worked since before FreeBSD came into being. > It wasn't implemented the same, but it behaved the same. I may have missed your point ... or maybe you are just agreeing with what I wrote. For this particular implementation of free, you get the following for `free(foo)' when foo == NULL: function call and stack overhead for free() lock something if we are threaded pointer assignment increment compare and branch function call and stack overhead for ifree() compare and branch unwind ifree() More stuff if HAVE_UTRACE decrement unlock something unwind free() Compare to `if (foo) free(foo);' compare and branch i.e. FreeBSD's free() is not optimized for freeing NULL pointers. Not that I think it should be -- as I said, that would be silly. -- Jacques Vidrine / n@nectar.com / jvidrine@verio.net / nectar@FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message