BTW, an even simpler patch could be: Index: modules/proxy/mod_proxy_balancer.c =================================================================== --- modules/proxy/mod_proxy_balancer.c (revision 1831396) +++ modules/proxy/mod_proxy_balancer.c (working copy) @@ -1886,25 +1886,12 @@ static void balancer_child_init(apr_pool_t *p, ser apr_status_t rv;
if (conf->balancers->nelts) { - apr_size_t size; - unsigned int num; - /* In 2.4.x we rely on the provider to return either the same - * in/out &bslot, a valid new one, or NULL for failure/exit(). - * TODO? for 2.6+/3.x we possibly could consider returned status - * to be real failures, but e.g. NOTFOUND/ENOSHM* to continue with - * existing conf->bslot (even when the returned one is NULL). - * Hence handle the slotmem reuse it here where we know it's valid - * both for fork()ed post_config()s and MPM winnt-like ones (run in - * child process too). The provider tells what it attached or not, - * and if not whether the child should stop (fatal) or continue - * with the "inherited" configuration. + /* The slotmem can't be NULL here with any MPM, initialized in + * post_config() it's either fork()ed on unixes MPMs, or directly + * available for fully threaded MPMs and winnt where post_config() + * is called in children processes too. */ - rv = storage->attach(&conf->bslot, conf->id, &size, &num, p); - if (!conf->bslot) { - ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, APLOGNO(01205) "slotmem_attach failed"); - exit(1); /* Ugly, but what else? */ - } - (void)rv; + ap_assert(conf->bslot != NULL); } balancer = (proxy_balancer *)conf->balancers->elts; _ since mod_proxy_balancer uses slotmem_shm only, attach() is not needed.