diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index 3f456702..234e7109 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -309,10 +309,12 @@ data_frame(State=#state{opts=Opts, streams=Streams}, StreamID, IsFin, Data) -> end. lingering_data_frame(State=#state{socket=Socket, transport=Transport, - http2_machine=HTTP2Machine0}, DataLen) -> + http2_machine=HTTP2Machine0}, DataLen) when DataLen > 0 -> Transport:send(Socket, cow_http2:window_update(DataLen)), HTTP2Machine1 = cow_http2_machine:update_window(DataLen, HTTP2Machine0), - State#state{http2_machine=HTTP2Machine1}. + State#state{http2_machine=HTTP2Machine1}; +lingering_data_frame(State, _) -> + State. headers_frame(State, StreamID, IsFin, Headers, PseudoHeaders=#{method := <<"CONNECT">>}, _) diff --git a/test/rfc7540_SUITE.erl b/test/rfc7540_SUITE.erl index 9f36b5b8..fe0c4ef9 100644 --- a/test/rfc7540_SUITE.erl +++ b/test/rfc7540_SUITE.erl @@ -3153,6 +3153,7 @@ lingering_data_counts_toward_connection_window(Config0) -> % Make sure server send RST_STREAM. timer:sleep(100), ok = gen_tcp:send(Socket, [ + cow_http2:data(1, nofin, <<0:0/unit:8>>), cow_http2:data(1, fin, <<0:1000/unit:8>>) ]), {ok, << SkipLen:24, 1:8, _:8, 1:32 >>} = gen_tcp:recv(Socket, 9, 1000),