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

Reply via email to