diff -ru httpd-trunk.orig/modules/cache/mod_disk_cache.c httpd-trunk.new2/modules/cache/mod_disk_cache.c
--- httpd-trunk.orig/modules/cache/mod_disk_cache.c	2005-08-09 11:51:09.473251000 -0400
+++ httpd-trunk.new2/modules/cache/mod_disk_cache.c	2005-08-17 15:26:38.800528925 -0400
@@ -125,6 +125,7 @@
  */
 #define CACHE_HEADER_SUFFIX ".header"
 #define CACHE_DATA_SUFFIX   ".data"
+#define CACHE_TEMP_SUFFIX   ".temp"
 #define CACHE_VDIR_SUFFIX   ".vary"
 
 static char *header_file(apr_pool_t *p, disk_cache_conf *conf,
@@ -163,6 +164,24 @@
      }
 }
 
+static char *temp_file(apr_pool_t *p, disk_cache_conf *conf,
+                       disk_cache_object_t *dobj, const char *name)
+{
+    if (!dobj->hashfile) {
+        dobj->hashfile = ap_cache_generate_name(p, conf->dirlevels, 
+                                                conf->dirlength, name);
+    }
+
+    if (dobj->prefix) {
+        return apr_pstrcat(p, dobj->prefix, CACHE_VDIR_SUFFIX, "/",
+                           dobj->hashfile, CACHE_TEMP_SUFFIX, NULL);
+     }
+     else {
+        return apr_pstrcat(p, conf->cache_root, "/", dobj->hashfile,
+                           CACHE_TEMP_SUFFIX, NULL);
+     }
+}
+
 static void mkdir_structure(disk_cache_conf *conf, const char *file, apr_pool_t *pool)
 {
     apr_status_t rv;
@@ -350,7 +369,6 @@
 /*
  * Hook and mod_cache callback functions
  */
-#define AP_TEMPFILE "/aptmpXXXXXX"
 static int create_entity(cache_handle_t *h, request_rec *r, const char *key, apr_off_t len)
 {
     disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
@@ -372,7 +390,7 @@
     dobj->prefix = NULL;
     dobj->datafile = data_file(r->pool, conf, dobj, key);
     dobj->hdrsfile = header_file(r->pool, conf, dobj, key);
-    dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
+    dobj->tempfile = temp_file(r->pool, conf, dobj, key);
 
     return OK;
 }
@@ -476,7 +494,7 @@
     dobj->key = nkey;
     dobj->name = key;
     dobj->datafile = data_file(r->pool, conf, dobj, nkey);
-    dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
+    dobj->tempfile = temp_file(r->pool, conf, dobj, nkey);
 
     /* Open the data file */
     flags = APR_READ|APR_BINARY;
@@ -772,9 +790,10 @@
 
             mkdir_structure(conf, dobj->hdrsfile, r->pool);
 
-            rv = apr_file_mktemp(&dobj->tfd, dobj->tempfile,
-                                 APR_CREATE | APR_WRITE | APR_BINARY | APR_EXCL,
-                                 r->pool);
+            rv = apr_file_open(&dobj->tfd, dobj->tempfile,
+                               APR_CREATE | APR_WRITE | APR_BINARY | APR_EXCL,
+                               APR_OS_DEFAULT,
+                               r->pool);
 
             if (rv != APR_SUCCESS) {
                 return rv;
@@ -803,19 +822,20 @@
                 return rv;
             }
 
-            dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
             tmp = regen_key(r->pool, r->headers_in, varray, dobj->name);
             dobj->prefix = dobj->hdrsfile;
             dobj->hashfile = NULL;
             dobj->datafile = data_file(r->pool, conf, dobj, tmp);
             dobj->hdrsfile = header_file(r->pool, conf, dobj, tmp);
+            dobj->tempfile = temp_file(r->pool, conf, dobj, tmp);
+
         }
     }
 
 
-    rv = apr_file_mktemp(&dobj->hfd, dobj->tempfile,
+    rv = apr_file_open(&dobj->hfd, dobj->tempfile,
                          APR_CREATE | APR_WRITE | APR_BINARY |
-                         APR_BUFFERED | APR_EXCL, r->pool);
+                         APR_BUFFERED | APR_EXCL, APR_OS_DEFAULT, r->pool);
 
     if (rv != APR_SUCCESS) {
         return rv;
@@ -896,7 +916,7 @@
         return rv;
     }
 
-    dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
+    dobj->tempfile = temp_file(r->pool, conf, dobj, dobj->key);
 
     ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
                  "disk_cache: Stored headers for URL %s",  dobj->name);
@@ -916,9 +936,9 @@
      * in file_cache_el_final().
      */
     if (!dobj->tfd) {
-        rv = apr_file_mktemp(&dobj->tfd, dobj->tempfile,
+        rv = apr_file_open(&dobj->tfd, dobj->tempfile,
                              APR_CREATE | APR_WRITE | APR_BINARY |
-                             APR_BUFFERED | APR_EXCL, r->pool);
+                             APR_BUFFERED | APR_EXCL, APR_OS_DEFAULT, r->pool);
         if (rv != APR_SUCCESS) {
             return rv;
         }

