]> granicus.if.org Git - curl/commitdiff
http2: don't signal settings change for same values
authorDaniel Stenberg <daniel@haxx.se>
Mon, 11 May 2015 10:05:14 +0000 (12:05 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 18 May 2015 07:33:47 +0000 (09:33 +0200)
lib/http2.c

index c6efc21c89609ae5fe6c925f3c7813219eb45c94..4eb842a61bcfa4902feb1805d8adbc65b1f83aea 100644 (file)
@@ -298,6 +298,8 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
     }
     break;
   case NGHTTP2_SETTINGS:
+  {
+    uint32_t max_conn = httpc->settings.max_concurrent_streams;
     DEBUGF(infof(conn->data, "Got SETTINGS for stream %x!\n", stream_id));
     httpc->settings.max_concurrent_streams =
       nghttp2_session_get_remote_settings(
@@ -309,10 +311,14 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
                  httpc->settings.max_concurrent_streams));
     DEBUGF(infof(conn->data, "ENABLE_PUSH == %s\n",
                  httpc->settings.enable_push?"TRUE":"false"));
-    infof(conn->data,
-          "Connection state changed (MAX_CONCURRENT_STREAMS updated)!\n");
-    Curl_multi_connchanged(conn->data->multi);
-    break;
+    if(max_conn != httpc->settings.max_concurrent_streams) {
+      /* only signal change if the value actually changed */
+      infof(conn->data,
+            "Connection state changed (MAX_CONCURRENT_STREAMS updated)!\n");
+      Curl_multi_connchanged(conn->data->multi);
+    }
+  }
+  break;
   default:
     DEBUGF(infof(conn->data, "Got frame type %x for stream %x!\n",
                  frame->hd.type, stream_id));