@@ -1040,7 +1040,7 @@ void
10401040Http2ConnectionState::init (Http2CommonSession *ssn)
10411041{
10421042 session = ssn;
1043- this ->_server_rwnd = Http2::initial_window_size ;
1043+ this ->_server_rwnd = Http2::session_initial_window_size ;
10441044
10451045 local_hpack_handle = new HpackHandle (HTTP2_HEADER_TABLE_SIZE);
10461046 remote_hpack_handle = new HpackHandle (HTTP2_HEADER_TABLE_SIZE);
@@ -1073,8 +1073,10 @@ Http2ConnectionState::send_connection_preface()
10731073
10741074 send_settings_frame (configured_settings);
10751075
1076- if (server_settings.get (HTTP2_SETTINGS_INITIAL_WINDOW_SIZE) > HTTP2_INITIAL_WINDOW_SIZE) {
1077- send_window_update_frame (0 , server_settings.get (HTTP2_SETTINGS_INITIAL_WINDOW_SIZE) - HTTP2_INITIAL_WINDOW_SIZE);
1076+ // If the session window size is non-default, send a window update right away
1077+
1078+ if (Http2::session_initial_window_size > HTTP2_INITIAL_WINDOW_SIZE) {
1079+ send_window_update_frame (0 , Http2::session_initial_window_size - HTTP2_INITIAL_WINDOW_SIZE);
10781080 }
10791081}
10801082
@@ -1417,7 +1419,7 @@ Http2ConnectionState::restart_streams()
14171419void
14181420Http2ConnectionState::restart_receiving (Http2Stream *stream)
14191421{
1420- uint32_t initial_rwnd = this -> server_settings . get (HTTP2_SETTINGS_INITIAL_WINDOW_SIZE) ;
1422+ uint32_t initial_rwnd = Http2::session_initial_window_size ;
14211423 uint32_t min_rwnd = std::min (initial_rwnd, this ->server_settings .get (HTTP2_SETTINGS_MAX_FRAME_SIZE));
14221424
14231425 // Connection level WINDOW UPDATE
@@ -1438,6 +1440,8 @@ Http2ConnectionState::restart_receiving(Http2Stream *stream)
14381440 return ;
14391441 }
14401442
1443+ // Update the window size for the stream
1444+ initial_rwnd = Http2::initial_window_size;
14411445 Http2WindowSize diff_size = initial_rwnd - std::max (static_cast <int64_t >(stream->server_rwnd ()), data_size);
14421446 stream->increment_server_rwnd (diff_size);
14431447 this ->send_window_update_frame (stream->get_id (), diff_size);
0 commit comments