From bbc34904c1b757d9f52ae50b8ce01ab7d3a6802a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 31 Jan 2015 15:49:10 +0900 Subject: [PATCH] Workaround stream treated inferior when it hits connection window limit --- lib/nghttp2_session.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/nghttp2_session.c b/lib/nghttp2_session.c index 019b9040..c4dd105c 100644 --- a/lib/nghttp2_session.c +++ b/lib/nghttp2_session.c @@ -2523,8 +2523,14 @@ static int session_after_frame_sent2(nghttp2_session *session) { assert(stream); next_item = nghttp2_session_get_next_ob_item(session); - session_outbound_item_cycle_weight(session, aob->item, - stream->effective_weight); + /* Imagine we hit connection window size limit while sending DATA + frame. If we decrement weight here, its stream might get + inferior share because the other streams' weight is not + decremented because of flow control. */ + if (session->remote_window_size > 0 || stream->remote_window_size <= 0) { + session_outbound_item_cycle_weight(session, aob->item, + stream->effective_weight); + } /* If priority of this stream is higher or equal to other stream waiting at the top of the queue, we continue to send this