You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by bo...@apache.org on 2009/02/23 23:28:27 UTC
svn commit: r747167 - in /apr/apr/branches/1.3.x: ./ CHANGES
file_io/unix/open.c
Author: bojan
Date: Mon Feb 23 22:28:25 2009
New Revision: 747167
URL: http://svn.apache.org/viewvc?rev=747167&view=rev
Log:
Backport r712674 from the trunk.
Fix a bug with the APR_DELONCLOSE flag. Child processes were (also)
unlinking the file. Badness ensued.
* file_io/unix/open.c:
(file_cleanup): add new parameter to tell whether the function was
invoked by the child's cleanup, or the regular cleanup. use it to
determine whether to unlink the file.
(apr_unix_file_cleanup, apr_unix_child_file_cleanup): pass appropriate
value to file_cleanup().
Modified:
apr/apr/branches/1.3.x/ (props changed)
apr/apr/branches/1.3.x/CHANGES
apr/apr/branches/1.3.x/file_io/unix/open.c
Propchange: apr/apr/branches/1.3.x/
------------------------------------------------------------------------------
svn:mergeinfo = /apr/apr/trunk:712674
Modified: apr/apr/branches/1.3.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.3.x/CHANGES?rev=747167&r1=747166&r2=747167&view=diff
==============================================================================
--- apr/apr/branches/1.3.x/CHANGES [utf-8] (original)
+++ apr/apr/branches/1.3.x/CHANGES [utf-8] Mon Feb 23 22:28:25 2009
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes for APR 1.3.4
+ *) Fix a bug with the APR_DELONCLOSE flag. Child processes were (also)
+ unlinking the file. [Greg Stein]
+
*) Fix compilation error on systems that do not have IPV6.
PR 46601 [Julien Charbon <jch 4js.com>]
Modified: apr/apr/branches/1.3.x/file_io/unix/open.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.3.x/file_io/unix/open.c?rev=747167&r1=747166&r2=747167&view=diff
==============================================================================
--- apr/apr/branches/1.3.x/file_io/unix/open.c (original)
+++ apr/apr/branches/1.3.x/file_io/unix/open.c Mon Feb 23 22:28:25 2009
@@ -26,13 +26,15 @@
#include "fsio.h"
#endif
-static apr_status_t file_cleanup(apr_file_t *file)
+static apr_status_t file_cleanup(apr_file_t *file, int is_child)
{
apr_status_t rv = APR_SUCCESS;
if (close(file->filedes) == 0) {
file->filedes = -1;
- if (file->flags & APR_DELONCLOSE) {
+
+ /* Only the parent process should delete the file! */
+ if (!is_child && (file->flags & APR_DELONCLOSE)) {
unlink(file->fname);
}
#if APR_HAS_THREADS
@@ -68,14 +70,14 @@
flush_rv = apr_file_flush(file);
}
- rv = file_cleanup(file);
+ rv = file_cleanup(file, 0);
return rv != APR_SUCCESS ? rv : flush_rv;
}
apr_status_t apr_unix_child_file_cleanup(void *thefile)
{
- return file_cleanup(thefile);
+ return file_cleanup(thefile, 1);
}
APR_DECLARE(apr_status_t) apr_file_open(apr_file_t **new,