You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Sander Striker <st...@apache.org> on 2002/07/04 17:33:15 UTC

RE: [PATCH] MaxMemFree directive

> From: Justin Erenkrantz [mailto:jerenkrantz@apache.org]
> Sent: 30 June 2002 09:51

> On Fri, Jun 28, 2002 at 01:28:33PM +0200, Sander Striker wrote:
>> All MPMs that are creating their own allocator* (to get rid of
>> locking overhead), now have the MaxMemFree directive.  MaxMemFree
>> allows you to set the maximum amount of memory (in kB), you want
>> the child allocator to hold on to.  Anything over that threshold
>> is free()d back to the system.  The default stays 'unlimited'.
> 
> +1 in concept.
> 
>> /me just realized we have another magic value to get rid off and instead
>>     do #define APR_ALLOCATOR_MAX_FREE_UNLIMITED  0,  *sigh*
>
> That'd be nice to add when you cleanup the allocator stuff to
> make the types opaque.  =)

*grunt* *grmbl* ;)

I'll do that before 2.0.40, but have something else on my plate right
now.
 
>> +#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
>> +apr_uint32_t ap_max_mem_free = 0;
>> +
>> +const char *ap_mpm_set_max_mem_free(cmd_parms *cmd, void *dummy,
>> +	                            const char *arg)
>> +{
>> +    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
>> +    if (err != NULL) {
>> +        return err;
>> +    }
>> +    
>> +    ap_max_mem_free = atoi(arg) * 1024;
>> +
>> +    return NULL;
>> +}
> 
> My one caveat would be to enforce that arg is positive.
> atoi() could return a negative, but it'll get casted to an
> unsigned 32-bit quantity.

Ack.  Will fix.

> Or does the config core code reject negative numbers straight out?
> (Way too lazy to check myself.)  I think you'd be safer if you used
> strtol (or better yet strtoul - strtoul is in C89, so that should be
> everywhere).  -- justin

I went to try this and got a compiler error because
 'strtoul_is_not_a_portable_function_use_strtol_instead' doesn't exist.

A quick grep on strtoul gave me:

/opt/src/build/httpd-2.0/CHANGES:8778:  *) Remove strtoul() use from mod_proxy because it isn't available
/opt/src/build/httpd-2.0/include/httpd.h:1684:/** strtoul does not exist on sunos4. */
/opt/src/build/httpd-2.0/include/httpd.h:1685:#ifdef strtoul
/opt/src/build/httpd-2.0/include/httpd.h:1686:#undef strtoul
/opt/src/build/httpd-2.0/include/httpd.h:1688:#define strtoul strtoul_is_not_a_portable_function_use_strtol_instead
/opt/src/build/httpd-2.0/server/core.c:2471:    /* WTF: If strtoul is not portable, then write a replacement.
/opt/src/build/httpd-2.0/server/.#core.c.1.187:2471:    /* WTF: If strtoul is not portable, then write a replacement.
/opt/src/build/httpd-2.0/srclib/pcre/pcretest.c:464:      ((size_offsets = (int)strtoul(argv[op+1], &endptr, 10)), *endptr == 0))

So, to summarize:

 - PCRE uses it
 - At other places we complain because we can't use strtoul because of the define
 - There is no apr_strtoul, which would make sense if it isn't portable
 - C89 is pretty ancient... does sunos still not implement it?

Sander

PS.  Haven't heard any objections, so I've committed MemMaxFree.