From: Justin Erenkrantz Date: Fri, 5 Oct 2001 08:54:19 +0000 (+0000) Subject: Allow the core input filter to handle AP_NONBLOCK_READ request for a X-Git-Tag: 2.0.26~98 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0813cc35a8df37c0d1f3f2af5423abba26efb748;p=apache Allow the core input filter to handle AP_NONBLOCK_READ request for a finite number of bytes (i.e. *readbytes > 0). ap_brigade_partition does a blocking read. So, what we should do is apr_bucket_read on the socket for non-blocking. If we get less than what they asked for, that's okay and we should just return that amount. If they were non-blocking, we should always be non-blocking. Ryan, Greg, and others can figure out if ap_brigade_partition should be tweaked to handle AP_NONBLOCK_READ natively. I'm of a mixed mind, but this addresses the short term need. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91312 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/core.c b/server/core.c index b62c260fa1..10139a7721 100644 --- a/server/core.c +++ b/server/core.c @@ -2853,7 +2853,16 @@ static int core_input_filter(ap_filter_t *f, apr_bucket_brigade *b, ap_input_mod apr_bucket *e; apr_bucket_brigade *newbb; + if (mode == APR_NONBLOCK_READ) { + e = APR_BRIGADE_FIRST(ctx->b); + rv = apr_bucket_read(e, &str, &len, mode); + + if (len < *readbytes) + *readbytes = len; + } + apr_brigade_partition(ctx->b, *readbytes, &e); + /* Must do split before CONCAT */ newbb = apr_brigade_split(ctx->b, e); APR_BRIGADE_CONCAT(b, ctx->b);