Sorry this won't work.
On Mon, Oct 6, 2014 at 9:52 PM, Yann Ylavic <[email protected]> wrote:
> Oups, I forgot the cleanup :p
>
> On Mon, Oct 6, 2014 at 9:45 PM, Yann Ylavic <[email protected]> wrote:
>> Index: server/mpm/prefork/prefork.c
>> ===================================================================
>> --- server/mpm/prefork/prefork.c (revision 1629482)
>> +++ server/mpm/prefork/prefork.c (working copy)
> [...]
>> @@ -1232,6 +1250,16 @@ static int prefork_run(apr_pool_t *_pconf, apr_poo
>> return DONE;
>> }
>>
>> + if (!retained->bucket) {
>> + retained->daemons_limit = ap_daemons_limit;
>> + retained->bucket = ap_malloc(sizeof(int) * ap_daemons_limit);
>> + if (!retained->bucket) {
>> + ap_log_error(APLOG_MARK, APLOG_CRIT, 0, ap_server_conf,
>> APLOGNO()
>> + "could not allocate buckets");
>> + }
>
> Here:
> + apr_pool_cleanup_register(s->process->pool, retained->bucket,
> + free_bucket, apr_pool_cleanup_null);
Here we have to use:
+ apr_pool_cleanup_register(s->process->pool, &retained->bucket,
+ free_bucket, apr_pool_cleanup_null);
>
>> + }
>> + memcpy(retained->bucket, bucket, sizeof(int) * ap_daemons_limit);
>> +
>> /* advance to the next generation */
>> /* XXX: we really need to make sure this new generation number isn't in
>> * use by any of the children.
>> [END]
>
> With :
>
> static apr_status_t free_bucket(void *bucket)
> {
> free(bucket);
And here:
free(*(int **)bucket);
> return APR_SUCCESS;
> }