mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
Revert r1831218, the API garantees slotmem_attach() is called in child_init().
r1831394 is the right follow to r1830800 to preserve "inherited" slotmems in children processes. While at it, comment on the expectations from mod_proxy_balancer w.r.t. slotmem_attach() implementations, and eventually how we could improve the API later (w/o backporting to 2.4.x). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1831396 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -1885,14 +1885,26 @@ static void balancer_child_init(apr_pool_t *p, server_rec *s)
|
|||||||
proxy_server_conf *conf = (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
|
proxy_server_conf *conf = (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
|
||||||
apr_status_t rv;
|
apr_status_t rv;
|
||||||
|
|
||||||
if (conf->balancers->nelts && !conf->bslot) {
|
if (conf->balancers->nelts) {
|
||||||
apr_size_t size;
|
apr_size_t size;
|
||||||
unsigned int num;
|
unsigned int num;
|
||||||
storage->attach(&(conf->bslot), conf->id, &size, &num, p);
|
/* 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.
|
||||||
|
*/
|
||||||
|
rv = storage->attach(&conf->bslot, conf->id, &size, &num, p);
|
||||||
if (!conf->bslot) {
|
if (!conf->bslot) {
|
||||||
ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01205) "slotmem_attach failed");
|
ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, APLOGNO(01205) "slotmem_attach failed");
|
||||||
exit(1); /* Ugly, but what else? */
|
exit(1); /* Ugly, but what else? */
|
||||||
}
|
}
|
||||||
|
(void)rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
balancer = (proxy_balancer *)conf->balancers->elts;
|
balancer = (proxy_balancer *)conf->balancers->elts;
|
||||||
|
Reference in New Issue
Block a user