diff --git a/apache2/mod_proxy_uwsgi.c b/apache2/mod_proxy_uwsgi.c index 9ea64517..663805db 100644 --- a/apache2/mod_proxy_uwsgi.c +++ b/apache2/mod_proxy_uwsgi.c @@ -365,7 +365,8 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_ ap_set_content_type(r, apr_pstrdup(r->pool, buf)); } - for(;;) { + int finish = 0; + while(!finish) { rv = ap_get_brigade(rp->input_filters, bb, AP_MODE_READBYTES, mode, conf->io_buffer_size); @@ -401,7 +402,13 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_ ap_proxy_buckets_lifetime_transform(r, bb, pass_bb); - ap_pass_brigade(r->output_filters, pass_bb); + // found the last brigade? + if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) finish = 1; + + if (ap_pass_brigade(r->output_filters, pass_bb) != APR_SUCCESS || c->aborted) { + finish = 1; + } + apr_brigade_cleanup(bb); apr_brigade_cleanup(pass_bb); }