On Mon, 24 Jul 2006, Steve Hay wrote:

Randy Kobes wrote:

Also, just to verify that it is the stray temp files
left over that are causing the problem, does it help
if you change the APR_EXCL flag in the call to apr_file_mktemp on about line 832 of library/util.c
to APR_TRUNCATE?
Yep, that makes the errors go away: it didn't fail once in about two dozen runs.

Does the following help?

=====================================================
Index: util.c
===================================================================
--- util.c      (revision 425268)
+++ util.c      (working copy)
@@ -811,6 +811,7 @@
     apr_status_t rc;
     char *tmpl;
     struct cleanup_data *data;
+    apr_int32_t flag;

     if (path == NULL) {
         rc = apr_temp_dir_get(&path, pool);
@@ -829,9 +830,13 @@
     apr_pool_cleanup_register(pool, data,
apreq_file_cleanup, apreq_file_cleanup);

- rc = apr_file_mktemp(fp, tmpl, /* NO APR_DELONCLOSE! see comment above */ - APR_CREATE | APR_READ | APR_WRITE
-                           | APR_EXCL | APR_BINARY, pool);
+    /* NO APR_DELONCLOSE! see comment above */
+ flag = APR_CREATE | APR_READ | APR_WRITE | APR_EXCL | APR_BINARY;
+    /* Win32 needs the following to remove temp files */
+#ifdef WIN32
+    flag |= APR_FILE_NOCLEANUP | APR_SHARELOCK;
+#endif
+    rc = apr_file_mktemp(fp, tmpl, flag, pool);

     if (rc == APR_SUCCESS) {
         apr_file_name_get(&data->fname, *fp);

================================================================

With the APR_SHARELOCK flag, I don't see any temp files
left over after about 50 runs of the upload.t test (without
it, but still with APR_FILE_NOCLEANUP, I would have 2-3
left over after 50 runs).

--
best regards,
Randy

Reply via email to