Admittedly, my memory is hazy. I cannot really rationalize its existence. This looks wrong now. I will throw it out.
> Am 21.09.2015 um 10:53 schrieb Yann Ylavic <[email protected]>: > > Hi Stefan, > >> >> Added: httpd/httpd/trunk/modules/http2/mod_h2/h2_conn_io.c >> URL: >> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/mod_h2/h2_conn_io.c?rev=1688474&view=auto >> ============================================================================== >> --- httpd/httpd/trunk/modules/http2/mod_h2/h2_conn_io.c (added) >> +++ httpd/httpd/trunk/modules/http2/mod_h2/h2_conn_io.c Tue Jun 30 15:26:16 >> 2015 >> @@ -0,0 +1,285 @@ > [] >> + >> +apr_status_t h2_conn_io_write(h2_conn_io *io, >> + const char *buf, size_t length) >> +{ >> + apr_status_t status = APR_SUCCESS; >> + io->unflushed = 1; >> + >> + if (io->buffer_output) { > [...] >> + } >> + else { >> + status = apr_brigade_write(io->output, flush_out, io, buf, length); >> + if (status == APR_SUCCESS >> + || APR_STATUS_IS_ECONNABORTED(status) >> + || APR_STATUS_IS_EPIPE(status)) { >> + /* These are all fine and no reason for concern. Everything else >> + * is interesting. */ >> + status = APR_SUCCESS; > > Why ECONNABORTED and EPIPE are not errors here? > >> + } >> + else { >> + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, io->connection, >> + "h2_conn_io: write error"); >> + } >> + } >> + >> + return status; >> +} > [...] >> + >> +apr_status_t h2_conn_io_flush(h2_conn_io *io) >> +{ >> + if (io->unflushed) { > [...] >> + >> + /* Send it out through installed filters (TLS) to the client */ >> + apr_status_t status = flush_out(io->output, io); >> + >> + if (status == APR_SUCCESS >> + || APR_STATUS_IS_ECONNABORTED(status) >> + || APR_STATUS_IS_EPIPE(status)) { >> + /* These are all fine and no reason for concern. Everything else >> + * is interesting. */ >> + io->unflushed = 0; > > Likewise? > >> + } >> + else { >> + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, io->connection, >> + "h2_conn_io: flush error"); >> + } >> + >> + return status; >> + } >> + return APR_SUCCESS; >> +} > > > It also seems that h2_session sometimes (ab)uses APR_TIMEUP as EAGAIN, > the former is generally a reason to stop processing though. Why not > use APR_EGAIN for those cases? > > > Regards, > Yann. <green/>bytes GmbH Hafenweg 16, 48155 Münster, Germany Phone: +49 251 2807760. Amtsgericht Münster: HRB5782
