Ian Holsman wrote:

Chuck Murcko wrote:


On Tuesday, July 17, 2001, at 12:54 PM, Chuck Murcko wrote:

Well, if the dechunk filter is not removing intermediate eos inserted by the http_in or core_in filters, as it should, then this allows the whole set of chunks through, and we should close the connection when finished, and we make the extra call into the dechunk filter to reset its state machine.


I'll have a look at the dechunk stuff, and see if a more generic fix can be done.


hi chuck..
Just put a debug line in the code, and it doesn't even seem that the de-chunk filter is getting called for this request.
I'll see If I can reproduce your bug with the apple OSX page
..Ian






While this will work, I think the fix should go into the dechunk filter in http_protocol.c. Then the eos check here (and more importantly, in any other filter using the dechunk filter ahead of it) works as it should.

The dechunk filter should remove all intermediate eos and append one final one when chunked content ends.


I believe the proxy may still have to check for APR_EOF buckets, as well.


Chuck

On Tuesday, July 17, 2001, at 12:15 PM, Victor J. Orlikowski wrote:



Hum....
I may be mistaken, but the end-of-stream bucket still needs to be
there. This patch makes certain that there will *never* be an EOS
bucket.

Feel free to correct me on this.


this seems to fix the problem...
can someone more familiar with brigades/buckets review it

Index: proxy_http.c
===================================================================
RCS file: /home/cvspublic/httpd-proxy/module-2.0/proxy_http.c,v
retrieving revision 1.79
diff -u -r1.79 proxy_http.c
--- proxy_http.c        2001/07/16 17:54:38     1.79
+++ proxy_http.c        2001/07/17 16:07:32
@@ -782,18 +782,20 @@

/* read the body, pass it to the output filters */
while (ap_get_brigade(rp->input_filters, bb, AP_MODE_BLOCKING,
&readbyte
s) == APR_SUCCESS) {
- if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
+ apr_bucket *b = APR_BRIGADE_LAST(bb);
+ if (APR_BUCKET_IS_EOS(b)) {
+ APR_BUCKET_REMOVE(b);
e = apr_bucket_flush_create();
APR_BRIGADE_INSERT_TAIL(bb, e);
ap_pass_brigade(r->output_filters, bb);



Chuck Murcko
Topsail Group
http://www.topsail.org/









Reply via email to