Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Sep 2012 09:47:45 +0100
From:      David Chisnall <theraven@FreeBSD.org>
To:        Garrett Cooper <yanegomi@gmail.com>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, Kevin Lo <kevlo@FreeBSD.org>, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r240850 - head/lib/libstand
Message-ID:  <E7AE8382-853A-41D9-981C-0C6A09785A53@FreeBSD.org>
In-Reply-To: <CAGH67wQf5whjgQmXD3Ln_-r=WsLMYrBQUBj_G-HoGf1a5F_4cg@mail.gmail.com>
References:  <201209230838.q8N8c6Tu056083@svn.freebsd.org> <20120923105220.GL37286@deviant.kiev.zoral.com.ua> <CAGH67wQf5whjgQmXD3Ln_-r=WsLMYrBQUBj_G-HoGf1a5F_4cg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 23 Sep 2012, at 20:27, Garrett Cooper wrote:

>    +1. free(3) should silently ignore NULL parameters passed into it.

Indeed.  The C standard's description for free() states that:

> If ptr is a null pointer, no action occurs.

This means that a standards-compilant compiler is entirely at liberty to =
elide these checks (not sure if GCC or LLVM does, but both have =
optimisation passes that optimise based on assumptions about standard =
library functions, although they may not run when compiled in a =
freestanding environment).

The only reasons for a NULL check before free() should be:

- Sanity checking (i.e. this pointer is never meant to be NULL, assert =
that it isnt)
- Recursive cleanup (don't dereference this pointer to clean up its =
elements if it is NULL)

David=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E7AE8382-853A-41D9-981C-0C6A09785A53>