diff options
author | Stefan Eissing <icing@apache.org> | 2017-04-21 14:21:31 +0200 |
---|---|---|
committer | Stefan Eissing <icing@apache.org> | 2017-04-21 14:21:31 +0200 |
commit | 013958a3d3c26967da9e859818f2765b9de35d04 (patch) | |
tree | 12fc008c429b1a49f9637a6e6168d47216ec6d54 /modules/http2/h2_session.c | |
parent | Introduce request taint-checking concept. (diff) | |
download | apache2-013958a3d3c26967da9e859818f2765b9de35d04.tar.xz apache2-013958a3d3c26967da9e859818f2765b9de35d04.zip |
On the trunk:
mod_http2: fixed possible deadlock that could occur when connections were
terminated early with ongoing streams. Fixed possible hanger with timeout
on race when connection considers itself idle.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1792195 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'modules/http2/h2_session.c')
-rw-r--r-- | modules/http2/h2_session.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/modules/http2/h2_session.c b/modules/http2/h2_session.c index adece255ee..264513f0f3 100644 --- a/modules/http2/h2_session.c +++ b/modules/http2/h2_session.c @@ -1050,7 +1050,8 @@ static ssize_t stream_data_cb(nghttp2_session *ng2s, break; case APR_ECONNRESET: - return 0; + case APR_ECONNABORTED: + return NGHTTP2_ERR_CALLBACK_FAILURE; case APR_EAGAIN: /* If there is no data available, our session will automatically @@ -2083,7 +2084,11 @@ apr_status_t h2_session_process(h2_session *session, int async) * That gives us the chance to check for MPMQ_STOPPING often. */ status = h2_mplx_idle(session->mplx); - if (status != APR_SUCCESS) { + if (status == APR_EAGAIN) { + dispatch_event(session, H2_SESSION_EV_DATA_READ, 0, NULL); + break; + } + else if (status != APR_SUCCESS) { dispatch_event(session, H2_SESSION_EV_CONN_ERROR, H2_ERR_ENHANCE_YOUR_CALM, "less is more"); } |