We now create memory sub-pools for each DB connection and close DB
connections in a pool cleanup function. This simplifies the ap_dbd_acquire() and ap_dbd_cacquire() functions, and also stops us from leaking ap_dbd_t structures when using reslists. We ensure that prepared statements are destroyed before their DB connection is closed, in case any drivers would have problems cleaning up prepared statements after the DB connection is closed. The combination of reslists and memory pool cleanup functions was causing segfaults when child processes exited, as reported in PR 39985. To prevent this, we register dbd_destroy() as a cleanup that will execute prior to the internal cleanup function registered by apr_reslist_create(). When the reslist's memory pool is destroyed, dbd_destroy() informs dbd_destruct() not to do anything when subsequently called by the reslist's internal cleanup function. We avoid the use of s->process->pool (the global pool) since it isn't destroyed by exiting child processes in most multi-process MPMs. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@496831 13f79535-47bb-0310-9956-ffa450edef68
parent
29cb8caa
Please register or sign in to comment