You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2016/02/23 20:12:31 UTC
svn commit: r1731931 - in /httpd/httpd/trunk/modules/http2: h2_io.c h2_io.h
Author: icing
Date: Tue Feb 23 19:12:31 2016
New Revision: 1731931
URL: http://svn.apache.org/viewvc?rev=1731931&view=rev
Log:
improved eos out handling on streams
Modified:
httpd/httpd/trunk/modules/http2/h2_io.c
httpd/httpd/trunk/modules/http2/h2_io.h
Modified: httpd/httpd/trunk/modules/http2/h2_io.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_io.c?rev=1731931&r1=1731930&r2=1731931&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_io.c (original)
+++ httpd/httpd/trunk/modules/http2/h2_io.c Tue Feb 23 19:12:31 2016
@@ -308,7 +308,7 @@ apr_status_t h2_io_out_readx(h2_io *io,
return APR_ECONNABORTED;
}
- if (io->eos_out) {
+ if (io->eos_out_read) {
*plen = 0;
*peos = 1;
return APR_SUCCESS;
@@ -326,7 +326,7 @@ apr_status_t h2_io_out_readx(h2_io *io,
else {
status = h2_util_bb_readx(io->bbout, cb, ctx, plen, peos);
if (status == APR_SUCCESS) {
- io->eos_out = *peos;
+ io->eos_out_read = *peos;
}
}
@@ -340,7 +340,7 @@ apr_status_t h2_io_out_read_to(h2_io *io
return APR_ECONNABORTED;
}
- if (io->eos_out) {
+ if (io->eos_out_read) {
*plen = 0;
*peos = 1;
return APR_SUCCESS;
@@ -351,7 +351,7 @@ apr_status_t h2_io_out_read_to(h2_io *io
return APR_EAGAIN;
}
- io->eos_out = *peos = h2_util_has_eos(io->bbout, *plen);
+ io->eos_out_read = *peos = h2_util_has_eos(io->bbout, *plen);
return h2_util_move(bb, io->bbout, *plen, NULL, "h2_io_read_to");
}
@@ -423,14 +423,17 @@ apr_status_t h2_io_out_close(h2_io *io,
if (io->rst_error) {
return APR_ECONNABORTED;
}
- if (!io->eos_out) { /* EOS has not been read yet */
+ if (!io->eos_out_read) { /* EOS has not been read yet */
process_trailers(io, trailers);
if (!io->bbout) {
io->bbout = apr_brigade_create(io->pool, io->bucket_alloc);
}
- if (!h2_util_has_eos(io->bbout, -1)) {
- APR_BRIGADE_INSERT_TAIL(io->bbout,
- apr_bucket_eos_create(io->bucket_alloc));
+ if (!io->eos_out) {
+ io->eos_out = 1;
+ if (!h2_util_has_eos(io->bbout, -1)) {
+ APR_BRIGADE_INSERT_TAIL(io->bbout,
+ apr_bucket_eos_create(io->bucket_alloc));
+ }
}
}
return APR_SUCCESS;
Modified: httpd/httpd/trunk/modules/http2/h2_io.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_io.h?rev=1731931&r1=1731930&r2=1731931&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_io.h (original)
+++ httpd/httpd/trunk/modules/http2/h2_io.h Tue Feb 23 19:12:31 2016
@@ -54,7 +54,8 @@ struct h2_io {
unsigned int request_body : 1; /* iff request has body */
unsigned int eos_in : 1; /* input eos has been seen */
unsigned int eos_in_written : 1; /* input eos has been forwarded */
- unsigned int eos_out : 1; /* output eos has been seen */
+ unsigned int eos_out : 1; /* output eos is present */
+ unsigned int eos_out_read : 1; /* output eos has been forwarded */
h2_io_op timed_op; /* which operation is waited on, if any */
struct apr_thread_cond_t *timed_cond; /* condition to wait on, maybe NULL */