Hi, I'm working on a problem where mod_perl doesn't seem to accept range requests documented here:
http://www.gossamer-threads.com/lists/modperl/dev/104360 Working with 2.2.22, my issue seems to be the mod_perl sendfile implementation uess ap_send_fd, and ap_send_fd does not create an EOS bucket, so in byterange_filter.c: /* * Don't attempt to do byte range work if this brigade doesn't * contain an EOS, or if any of the buckets has an unknown length; * this avoids the cases where it is expensive to perform * byteranging (i.e. may require arbitrary amounts of memory). */ if (!APR_BUCKET_IS_EOS(e) || clength <= 0) { ap_remove_output_filter(f); return ap_pass_brigade(f->next, bb); } we don't handle range requests, and so my mod_perl handler does not work with range requests. My question is should ap_send_fd be inserting an eos bucket? i.e. alex@alex ~/httpd-2.2.22 $ diff -u server/protocol.c.orig server/protocol.c --- server/protocol.c.orig 2012-01-24 12:02:19.000000000 -0800 +++ server/protocol.c 2012-05-24 18:24:57.914018451 -0700 @@ -1386,6 +1386,8 @@ bb = apr_brigade_create(r->pool, c->bucket_alloc); b = apr_bucket_file_create(fd, offset, len, r->pool, c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); + b = apr_bucket_eos_create(c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, b); rv = ap_pass_brigade(r->output_filters, bb); if (rv != APR_SUCCESS) { alex@alex ~/httpd-2.2.22 $ which does "fix" the problem for me (i.e. range requests work), but I have no idea the implications behind this and the warning in the comment about arbitrary amounts of memory. =) Thanks for any help/guidance you can provide. Cheers, Alex