Eric,
  I'm not sure what you're asking. The global mutex will cover the call to 
init_conn_pool(), so there isn't a problem with worker->cp getting overlayed if 
that's what you're thinking. The problem is that ap_proxy_initialize_worker() 
gets called repeatedly with the same worker pointer. The first time it's called 
for a particular worker, it creates a connection pool and the worker thread 
mutex. This mutex appears to only be used in ap_proxy_determine_connection() to 
protect setting of worker->cp->addr by apr_sockaddr_info_get() (it also 
protects use of worker->cp->pool, but it's not clear that was recognized as a 
requirement). But _every_ use of worker->cp->pool must be serialized. 
Subsequent calls to ap_proxy_initialize_worker() with the same worker pointer 
will use the pool and mutex created in the first call. It's only these calls 
after the first that are at risk for concurrent use of the pool (hence my use 
of the 'notfirst' flag). In the first call, I don't even bother getting the 
proxy mutex as there isn't any way for other threads to be using the pool 
before it's created.

-- 
Don Poitras - Host R&D    SAS Institute Inc.            SAS Campus Drive 
mailto:sas...@sas.com     (919)531-5637  Fax:677-4444   Cary, NC 27513

Reply via email to