You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2018/02/14 03:06:51 UTC

[trafficserver] branch 7.1.x updated: Decrement stream counts just after the stream is removed from stream_list

This is an automated email from the ASF dual-hosted git repository.

zwoop pushed a commit to branch 7.1.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/7.1.x by this push:
     new abdd1d8  Decrement stream counts just after the stream is removed from stream_list
abdd1d8 is described below

commit abdd1d83745d409b8655d9c87c05991a20135bb5
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Tue Feb 13 09:13:19 2018 +0900

    Decrement stream counts just after the stream is removed from stream_list
    
    HTTP/2 active stream counts (`client_streams_in_count` and `client_streams_out_count`) are decremented in `Http2Stream::release_stream()`.
    This is introduced by dc8be341578aa0fa900c84265d0a336414dfad9b. But these counts should be decremented just after the stream is
    removed from `stream_list` in `Http2Stream::delete_stream()` like these counts are incremented just after the stream is added in
    `stream_list`. Because when ATS sends END_STREAM flag or RST_STREAM frame, endpoints might open a new stream.
    
    (cherry picked from commit b57c0d1dedfe09909bd0ee6fac661aee2082c920)
---
 proxy/http2/Http2ConnectionState.cc | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/proxy/http2/Http2ConnectionState.cc b/proxy/http2/Http2ConnectionState.cc
index 897f53d..992113b 100644
--- a/proxy/http2/Http2ConnectionState.cc
+++ b/proxy/http2/Http2ConnectionState.cc
@@ -1126,6 +1126,16 @@ Http2ConnectionState::delete_stream(Http2Stream *stream)
   }
 
   stream_list.remove(stream);
+  if (http2_is_client_streamid(stream->get_id())) {
+    ink_assert(client_streams_in_count > 0);
+    --client_streams_in_count;
+  } else {
+    ink_assert(client_streams_out_count > 0);
+    --client_streams_out_count;
+  }
+  // total_client_streams_count will be decremented in release_stream(), because it's a counter include streams in the process of
+  // shutting down.
+
   stream->initiating_close();
 
   return true;
@@ -1134,16 +1144,10 @@ Http2ConnectionState::delete_stream(Http2Stream *stream)
 void
 Http2ConnectionState::release_stream(Http2Stream *stream)
 {
-  // Update stream counts
   if (stream) {
+    // Decrement total_client_streams_count here, because it's a counter include streams in the process of shutting down.
+    // Other counters (client_streams_in_count/client_streams_out_count) are already decremented in delete_stream().
     --total_client_streams_count;
-    if (http2_is_client_streamid(stream->get_id())) {
-      ink_assert(client_streams_in_count > 0);
-      --client_streams_in_count;
-    } else {
-      ink_assert(client_streams_out_count > 0);
-      --client_streams_out_count;
-    }
   }
 
   if (ua_session) {

-- 
To stop receiving notification emails like this one, please contact
zwoop@apache.org.