diff options
author | rjung <rjung@13f79535-47bb-0310-9956-ffa450edef68> | 2019-07-17 11:31:02 +0000 |
---|---|---|
committer | rjung <rjung@13f79535-47bb-0310-9956-ffa450edef68> | 2019-07-17 11:31:02 +0000 |
commit | 326ecf492561b5337f2a512f81159ade8e535b62 (patch) | |
tree | 7645aaf2471fae7574b61487583a98e680dddaf5 | |
parent | 0b4e2e2623cab8e26a027096021d64a772720c1e (diff) | |
download | libapr-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.c | 13 |
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 |