* Move the tasks of eor_bucket_destroy (status update, transaction logging) to
a cleanup function that is registered with the request pool. eor_bucket_destroy only destroys the request pool if there is still a request at this point of time which triggers the call of the cleanup function. This is needed as the eor bucket could be (and usually is) allocated from a pool different from the request pool (the connection pool in this case). This can lead to situations where eor_bucket_destroy is called at a point of time when the request pool had been already destroyed. But the status update and the transaction logging rely on the request pool. In practise this happens with the worker MPM if the client refuses to read the response from the handler. Then the unsent data (including the eor bucket) remains in a brigade allocated from the connection pool which is the parent of the request pool. This brigade is cleaned up during the cleanup of the ptrans pool in worker_thread. As the request pool gets destroyed during this cleanup operation *before* the brigade gets cleaned up eor_bucket_destroy starts the status update and the transaction logging with a destroyed request pool which leads to a segfault. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@451279 13f79535-47bb-0310-9956-ffa450edef68
parent
54911d8f
Please register or sign in to comment