]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mod_file_cache brokeness
authorBill Stoddard <stoddard@apache.org>
Mon, 4 Jun 2001 14:20:20 +0000 (14:20 +0000)
committerBill Stoddard <stoddard@apache.org>
Mon, 4 Jun 2001 14:20:20 +0000 (14:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89266 13f79535-47bb-0310-9956-ffa450edef68

STATUS

diff --git a/STATUS b/STATUS
index f206f68602d7c47b594d993e2705377707b6262a..10e0f21394c3c7e305935178e373b38c3e64c4aa 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -1,5 +1,5 @@
 APACHE 2.0 STATUS:                                             -*-text-*-
-Last modified at [$Date: 2001/06/02 00:22:19 $]
+Last modified at [$Date: 2001/06/04 14:20:20 $]
 
 Release:
 
@@ -83,6 +83,37 @@ RELEASE SHOWSTOPPERS:
 
     WARNING: ALWAYS check srclib/apr/STATUS and srclib/apr-util/STATUS
 
+    * File handle caching in mod_file_cache is broken in the multi
+      threaded MPMs. The original intent of caching file handles 
+      was that these handles would ONLY be used in an apr_sendfile()
+      call.  With recent optimizations added to core_output_filter
+      to pipeline output byte streams, we actually read bytes from
+      these cached file handles into buffers. The problem is that
+      while it is okay for multiple threads to share a file handle
+      for use on a sendfile call (because the filepointer is not used, 
+      in sendfile) it is NOT okay for threads to share a file handle
+      for reads or writes (because the filepointer is used in reads
+      and writes).
+
+      You can share a file handle across threads in Windows if you
+      open the file for OVERLAPPED io. A file opened for overlapped
+      io does not have a file pointer; each thread must manage
+      tracking its location in the file explicity. This is a cool
+      feature IMHO.  APR would need to be expanded to handle 
+      reading and writing to files opened for overlapped io 
+      (specifically to manage a per-thread file pointer and handle
+      async io events internal to APR). This doesn't fix the problem
+      under *ix though. 
+
+      Potential Solutions:
+      1. We either need to ensure that a cached file handle is only
+      used on a sendfile call (Bill prefers this solution. I think.).
+      2. Cliff Wooley has some ideas about special purpose buckets
+      that would recognise when an apr_file_t is cached (thus shared)
+      and do the right thing (locking, whatever) to ensure that the
+      filepointer does not get trashed.
+      3.?
+
     * There is a big leak of MMAPs that occurs in modules such as
       mod_file_cache that needs to be taken care of.  Several
       potential solutions were tossed about on new-httpd and apr-dev
@@ -94,6 +125,12 @@ RELEASE SHOWSTOPPERS:
             and its apr_bucket_file in the request pool.
           - add an extra parameter to apr_bucket_file_create() which is the
             pool that an MMAP (if any) for that file should be created in
+      [Bill says that this memory leak has been fixed in
+      mod_file_cache. We now create a new apr_file_t in the request pool that 
+      we send on the ap_send_fd in mod_file_cache. There are other significant
+      problems (see above)]
+
+
 
     * There is a bug in how we sort some hooks, at least the pre-config
       hook.  The first time we call the hooks, they are in the correct