From: Yann Ylavic Date: Fri, 15 May 2020 12:27:13 +0000 (+0000) Subject: ap_filter_output_pending(): test where each filter should yield after running. X-Git-Tag: 2.5.0-alpha2-ci-test-only~1435 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7e4735db9629f0ec4ca454f79dc3ef0ba0e3742;p=thirdparty%2Fapache%2Fhttpd.git ap_filter_output_pending(): test where each filter should yield after running. Since running a filter may pass data next to it, ap_filter_output_pending() should test for ap_filter_should_yield(f->next) after each f call, otherwise it won't take into account new pending data in filters it just walked. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1877785 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/util_filter.c b/server/util_filter.c index b71dcdf1adb..a6ab80124c7 100644 --- a/server/util_filter.c +++ b/server/util_filter.c @@ -1271,11 +1271,12 @@ AP_DECLARE_NONSTD(int) ap_filter_output_pending(conn_rec *c) if (rv != APR_SUCCESS) { ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(00470) "write failure in '%s' output filter", f->frec->name); - rc = rv; + rc = AP_FILTER_ERROR; break; } - if (fp->bb && !APR_BRIGADE_EMPTY(fp->bb)) { + if ((fp->bb && !APR_BRIGADE_EMPTY(fp->bb)) + || ap_filter_should_yield(f->next)) { rc = OK; break; }