On Wed, 17 Dec 2003, Brad Nicholes wrote:
> before setting the content-length header. The problem is that there
> appears to be only one bucket and the length of that bucket is
> (actual_filesize - 4gig) for any file greater than 4gig.
Weird, but I can believe it.
> Where should the dividing up of the whole file into smaller buckets
> happen?
Right now it's supposed to be happening in the handler. I've always hated
that. I think it'd be much cooler if this could be handled inside the
buckets code. But I don't know right off where the right place to do that
would be.
Can't do it in apr_bucket_file_create() by having it create multiple
buckets and chaining them, because the bucket creation operation is
semantically restricted to creating only /one/ bucket, and violating that
would cause all kinds of macro ops to be broken.
Can't do it in file_bucket_read() by having a single file bucket contain
the large file and just pretend it had either only 4GB of data or by
having e->length == -1 (size unknown), because that would cause
apr_brigade_length() to do the wrong thing [return an incorrect brigade
length or have to actually read the file in to memory (or mmap it),
respectively, both of which are Badness].
I'll try to think of an alternative, but suggestions are welcome.
--Cliff
|