httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yann Ylavic <ylavic....@gmail.com>
Subject Re: svn commit: r1688474 [4/21] - in /httpd/httpd/trunk/modules/http2: ./ m4/ mod-h2.xcodeproj/ mod-h2.xcodeproj/project.xcworkspace/ mod-h2.xcodeproj/project.xcworkspace/xcshareddata/ mod-h2.xcodeproj/xcuserdata/ mod-h2.xcodeproj/xcuserdata/sei.xcuserdata...
Date Mon, 21 Sep 2015 08:53:47 GMT
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.

Mime
View raw message