Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Dec 2000 15:56:48 -0600
From:      "Jacques A. Vidrine" <n@nectar.com>
To:        Chris Costello <chris@calldei.com>
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>
In-Reply-To: <20001217153656.F54486@holly.calldei.com>; from chris@calldei.com on Sun, Dec 17, 2000 at 03:36:56PM -0600
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>

next in thread | previous in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001217155648.C63080>