httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Graham Dumpleton <graham.dumple...@gmail.com>
Subject Re: rational behind not checking the return value of apr_palloc and apr_pcalloc
Date Wed, 01 Sep 2010 04:19:39 GMT
On 1 September 2010 14:07, dave b <db.pub.mail@gmail.com> wrote:
> What is the rational behind not checking the return value of
> apr_palloc and apr_pcalloc?

Specifically here talking about why HTTPD code doesn't check. Ie.,
core server code and modules supplied with HTTPD.

I am clarifying this because he is hitting up on me as to why mod_wsgi
doesn't do it, yet the HTTPD code itself doesn't do it and I am just
following that precedent. So suggested he ask here why there is no
practice of checking for NULL values in HTTPD code when doing
allocations against pools. :-)

Graham

> code memory/unix/apr_pools.c from apr-1.4.2
> APR_DECLARE(void *) apr_pcalloc(apr_pool_t *pool, apr_size_t size);
> APR_DECLARE(void *) apr_pcalloc(apr_pool_t *pool, apr_size_t size)
> {
>    void *mem;
>
>    if ((mem = apr_palloc(pool, size)) != NULL) {
>        memset(mem, 0, size);
>    }
>
>    return mem;
> }
>
> and
> apr_palloc can return NULL.
> So I modified the code and the testdir test failed in one place ->
>
> "    node = active->next;
>    if (size <= node_free_space(node)) {
>        list_remove(node);
>    }
>    else {
>        if ((node = allocator_alloc(pool->allocator, size)) == NULL) {
>            if (pool->abort_fn)
>                pool->abort_fn(APR_ENOMEM); /* HERE */
>
>            return NULL;
>        }
>    }
>
> When you run the testdir (test). If you change the above to be:
>
>
> .....
>        if ((node = allocator_alloc(pool->allocator, size)) == NULL) {
>            if (!   pool->abort_fn) /* note the ! added */
>                pool->abort_fn(APR_ENOMEM);
>
>            return NULL; /* you end up here */
>        }
>    }
> and you will fail one of the tests. This to me suggests that this scenario is
> possible if the pool is like that one failed test *but* pool->abort_fn is not
> true :)
> "
>
> So what is the rational behind most users of these method *not*
> checking the return code - because from what I have seen / know it is
> possible return NULL.
>
> Also see:  https://issues.apache.org/bugzilla/show_bug.cgi?id=49847
>

Mime
View raw message