C doesn't break on free(NULL) so why is pfree developed to break on NULL?
Is there any way in PostgreSQL to overcome this so that it won't break,
apart from checking if the pointer NULL?

Search Discussions

  • Robert Haas at Mar 4, 2011 at 2:50 pm

    On Fri, Mar 4, 2011 at 8:08 AM, Marios Vodas wrote:
    C doesn't break on free(NULL) so why is pfree developed to break on NULL?
    Is there any way in PostgreSQL to overcome this so that it won't break,
    apart from checking if the pointer NULL?
    I think that free(NULL) works on some platforms but not all. I don't
    see what advantage we'd get out of making pfree(NULL) silently work,
    and there's a clear disadvantage: it would remove a useful sanity
    check.

    --
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
  • Peter Geoghegan at Mar 4, 2011 at 3:04 pm

    On 4 March 2011 14:50, Robert Haas wrote:
    I think that free(NULL) works on some platforms but not all.  I don't
    see what advantage we'd get out of making pfree(NULL) silently work,
    and there's a clear disadvantage: it would remove a useful sanity
    check.
    I don't feel particularly strongly about what pfree() should do one
    way or the other, but that isn't so; free(NULL) works on all
    platforms, and is required to by the standard.

    --
    Regards,
    Peter Geoghegan
  • Tom Lane at Mar 4, 2011 at 3:21 pm

    Peter Geoghegan writes:
    On 4 March 2011 14:50, Robert Haas wrote:
    I think that free(NULL) works on some platforms but not all.  I don't
    see what advantage we'd get out of making pfree(NULL) silently work,
    and there's a clear disadvantage: it would remove a useful sanity
    check.
    I don't feel particularly strongly about what pfree() should do one
    way or the other, but that isn't so; free(NULL) works on all
    platforms, and is required to by the standard.
    For the last few years it's been pretty safe to assume that, but it did
    not use to be so --- pre ISO C spec, some malloc libraries allowed
    free(NULL) and some didn't.

    In any case, this has been debated before and the project policy is
    that having pfree(NULL) throw an error is a net benefit. The main case
    where it's really useful to not throw an error is where malloc(0)
    returns NULL rather than a valid pointer (and BTW, both of those
    behaviors are allowed by spec). However, palloc(0) is guaranteed
    to give you a valid pointer that you can pfree, so that argument
    doesn't hold here.

    regards, tom lane

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-hackers @
categoriespostgresql
postedMar 4, '11 at 1:08p
activeMar 4, '11 at 3:21p
posts4
users4
websitepostgresql.org...
irc#postgresql

People

Translate

site design / logo © 2022 Grokbase