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?
--
Bojan
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;