2009/2/17 Mladen Turk <mt...@apache.org>: > Graham Dumpleton wrote: >> >> 2009/2/17 Mladen Turk <mt...@apache.org>: >>> >>> Graham Dumpleton wrote: >>>> >>>> 2009/2/17 Joe Orton <jor...@redhat.com>: >>>>>> >>>>>> I did used to perform a dup, but was told that this would cause >>>>>> problems with file locking. Specifically was told: >>>>> >>>>> I'm getting lost here. What has file locking got to do with it? Does >>>>> mod_wscgi rely on file locking somehow? >>> >>> I'm lost as well :) >> >> Consider: >> >> fd1 = .... >> >> lock(fd1) >> >> fd2 = dup(fd1) >> >> close(fd2) # will release the lock under some lock APIs even though >> not last reference to underlying file object >> >> write(fd1) # lock has already been released so not gauranteed that only >> writer >> >> close(fd1) >> >> At least that is how I understand it from what is being explained to >> me and pointed out in various documentation. >> >> So, if fd2 is the file descriptor created for file bucket in Apache, >> if it gets closed before application later wants to write to file >> through fd1, then application has lost its exclusive ownership >> acquired by way of the lock and something else could have acquired >> lock and started modifying it on basis that it has exclusive onwership >> at that time. >> > > Well, like said that won't work, neither is portable > (eg, apr_os_file_t is HANDLE on win32)
I already said I only support the optimisation on UNIX. I don't care about Windows. > What you will need is the code that will take the Python > object and invoke Python file api feeding the apr_bucket. > (Basically writing the apr_bucket_python_file). As I already tried to explain, even for the case of the bucket being used to hold a reference to the Python object, that will not work because of the gaurantees that WSGI applications require regarding data needing to be flushed. > However the simplest thing might be an intermediate temp file, in > which case httpd could reference the file name not the file > object itself. Which would likely be slower than using existing fallback streaming mechanism available that reads file into memory in blocks and pushes them through as transient buckets. > Not sure how woule that work with dynamic file > since apr and python might use different platform locking > mechanisms. Python uses operating system locking mechanisms, just like APR library would. Graham