We can't simply document it, this is definately a significant bug.
Reviewing your patch - ty!
Bill
Bojan Smojver wrote:
> On Sat, 2007-04-28 at 09:02 +1000, Bojan Smojver wrote:
>
>> I guess 41119 will be left the way it is? Should we just document and
>> close?
>
> Here is that hackish patch (also attached to the bug report).
>
> What's the final verdict on this behaviour? Document and close? Or
> patch?
>
>
>
> ------------------------------------------------------------------------
>
> Index: memory/unix/apr_pools.c
> ===================================================================
> --- memory/unix/apr_pools.c (revision 537103)
> +++ memory/unix/apr_pools.c (working copy)
> @@ -2100,6 +2100,13 @@
> cleanup_pool_for_exec(p);
> }
>
> +static int cleanup_for_exec = 0;
> +
> +APR_DECLARE(int) apr_cleanup_is_for_exec()
> +{
> + return cleanup_for_exec;
> +}
> +
> APR_DECLARE(void) apr_pool_cleanup_for_exec(void)
> {
> #if !defined(WIN32) && !defined(OS2)
> @@ -2112,7 +2119,9 @@
> * I can do about that (except if the child decides
> * to go out and close them
> */
> + cleanup_for_exec = 1;
> cleanup_pool_for_exec(global_pool);
> + cleanup_for_exec = 0;
> #endif /* !defined(WIN32) && !defined(OS2) */
> }
>
> Index: include/arch/apr_private_common.h
> ===================================================================
> --- include/arch/apr_private_common.h (revision 537103)
> +++ include/arch/apr_private_common.h (working copy)
> @@ -39,4 +39,7 @@
> #define APR_UINT32_TRUNC_CAST apr_uint32_t
> #define APR_UINT32_MAX 0xFFFFFFFFUL
>
> +/* cleanup_for_exec */
> +int apr_cleanup_is_for_exec();
> +
> #endif /*APR_PRIVATE_COMMON_H*/
> Index: file_io/win32/readwrite.c
> ===================================================================
> --- file_io/win32/readwrite.c (revision 537103)
> +++ file_io/win32/readwrite.c (working copy)
> @@ -467,6 +467,10 @@
>
> APR_DECLARE(apr_status_t) apr_file_flush(apr_file_t *thefile)
> {
> + if (apr_cleanup_is_for_exec()) {
> + return APR_SUCCESS;
> + }
> +
> if (thefile->buffered) {
> DWORD numbytes, written = 0;
> apr_status_t rc = 0;
> Index: file_io/os2/readwrite.c
> ===================================================================
> --- file_io/os2/readwrite.c (revision 537103)
> +++ file_io/os2/readwrite.c (working copy)
> @@ -283,6 +283,10 @@
>
> APR_DECLARE(apr_status_t) apr_file_flush(apr_file_t *thefile)
> {
> + if (apr_cleanup_is_for_exec()) {
> + return APR_SUCCESS;
> + }
> +
> if (thefile->buffered) {
> ULONG written = 0;
> int rc = 0;
> Index: file_io/unix/readwrite.c
> ===================================================================
> --- file_io/unix/readwrite.c (revision 537103)
> +++ file_io/unix/readwrite.c (working copy)
> @@ -319,6 +319,10 @@
>
> APR_DECLARE(apr_status_t) apr_file_flush(apr_file_t *thefile)
> {
> + if (apr_cleanup_is_for_exec()) {
> + return APR_SUCCESS;
> + }
> +
> if (thefile->buffered) {
> if (thefile->direction == 1 && thefile->bufpos) {
> apr_ssize_t written;