summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrjung <rjung@13f79535-47bb-0310-9956-ffa450edef68>2019-07-17 11:31:02 +0000
committerrjung <rjung@13f79535-47bb-0310-9956-ffa450edef68>2019-07-17 11:31:02 +0000
commit326ecf492561b5337f2a512f81159ade8e535b62 (patch)
tree7645aaf2471fae7574b61487583a98e680dddaf5
parent0b4e2e2623cab8e26a027096021d64a772720c1e (diff)
downloadlibapr-326ecf492561b5337f2a512f81159ade8e535b62.tar.gz
Follow up to r1675967 (trunk) resp. r1863202 (1.7.x):
When pool debugging is enabled, make sure we don't try to emit any debug events after the debug log file handle has been closed. Backport of r1675970 from trunk. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/1.7.x@1863203 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--memory/unix/apr_pools.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/memory/unix/apr_pools.c b/memory/unix/apr_pools.c
index 9fdd00129..eb173c88e 100644
--- a/memory/unix/apr_pools.c
+++ b/memory/unix/apr_pools.c
@@ -636,6 +636,12 @@ static apr_allocator_t *global_allocator = NULL;
#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE_ALL)
static apr_file_t *file_stderr = NULL;
+static apr_status_t apr_pool_cleanup_file_stderr(void *data)
+{
+ file_stderr = NULL;
+ return APR_SUCCESS;
+}
+
#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE_ALL) */
/*
@@ -1706,6 +1712,13 @@ APR_DECLARE(apr_status_t) apr_pool_initialize(void)
file_stderr = debug_log;
if (file_stderr) {
+ /* Add a cleanup handler that sets the debug log file handle
+ * to NULL, otherwise we'll try to log the global pool
+ * destruction event with predictably disastrous results. */
+ apr_pool_cleanup_register(global_pool, NULL,
+ apr_pool_cleanup_file_stderr,
+ apr_pool_cleanup_null);
+
apr_file_printf(file_stderr,
"POOL DEBUG: [PID"
#if APR_HAS_THREADS