summaryrefslogtreecommitdiffstats
path: root/modules/http2/h2_session.c
diff options
context:
space:
mode:
authorStefan Eissing <icing@apache.org>2017-04-21 14:21:31 +0200
committerStefan Eissing <icing@apache.org>2017-04-21 14:21:31 +0200
commit013958a3d3c26967da9e859818f2765b9de35d04 (patch)
tree12fc008c429b1a49f9637a6e6168d47216ec6d54 /modules/http2/h2_session.c
parentIntroduce request taint-checking concept. (diff)
downloadapache2-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.c9
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");
}