httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joachim Zobel <jzo...@heute-morgen.de>
Subject Re: How to identify apache memory
Date Mon, 05 Mar 2007 21:00:29 GMT
Am Montag, den 05.03.2007, 13:42 -0600 schrieb William A. Rowe, Jr.:
> Just register one of two free functions as cleanups of the pool, based
> on the origin of the data.

How could that help me? I think I don't get the idea.

I think I should restate my problem. I can do something like

-------------------------------------------------------------
static apr_pool_t *volatile p_cur = NULL;

static void *xml2_alloc(size_t sz)
{
    void *mem = apr_palloc(p_cur, sz + sizeof(size_t));
    size_t *psz = mem;
    *psz = sz;
    return (char *) mem + sizeof(size_t);
}
-------------------------------------------------------------

There is the obvious ugliness of the current pool, which is easily
possible with prefork, but difficult with others.

There is also the problem that usage of pool memory in a filter is a de
facto leak when large documents are encountered.

I would prefer to do something like

const unsigned int mgc = 0x88DEFEA7;

static void *xml2_alloc(size_t sz)
{
    void *mem = malloc(sz + sizeof(int));
    const unsigned int *mark = mem;
    *mark = mgc;
    return (char *) mem + sizeof(int);
}
    
static void xml2_free(void *emem)
{
    void *mem = (char *)emem - sizeof(int);
    const unsigned int *mark = mem;
    if (*mark == mgc) {
        free(mem);
    }
}

However I don't know if I can safely do that with apache memory (both,
bucket alloc and pool) and if there is value for mgc I can use.

Sincerely,
Joachim











Mime
View raw message