]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
ap_filter_output_pending(): test where each filter should yield after running.
authorYann Ylavic <ylavic@apache.org>
Fri, 15 May 2020 12:27:13 +0000 (12:27 +0000)
committerYann Ylavic <ylavic@apache.org>
Fri, 15 May 2020 12:27:13 +0000 (12:27 +0000)
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

server/util_filter.c

index b71dcdf1adbaeadfa575b8861fb5a391cf1152db..a6ab80124c760395f70eca3202740b4e9e0153d2 100644 (file)
@@ -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;
             }