diff --git a/src/h2_connection.erl b/src/h2_connection.erl index 071f5744..a79661a9 100644 --- a/src/h2_connection.erl +++ b/src/h2_connection.erl @@ -1117,13 +1117,19 @@ handle_event({call, From}, streams, handle_event({call, From}, {get_response, StreamId}, #connection{}=Conn) -> Stream = h2_stream_set:get(StreamId, Conn#connection.streams), - Reply = case h2_stream_set:type(Stream) of - closed -> - {ok, h2_stream_set:response(Stream)}; - active -> - not_ready - end, - {keep_state, Conn, [{reply, From, Reply}]}; + {Reply, NewStreams} = + case h2_stream_set:type(Stream) of + closed -> + {_, NewStreams0} = + h2_stream_set:close( + Stream, + garbage, + Conn#connection.streams), + {{ok, h2_stream_set:response(Stream)}, NewStreams0}; + active -> + {not_ready, Conn#connection.streams} + end, + {keep_state, Conn#connection{streams=NewStreams}, [{reply, From, Reply}]}; handle_event({call, From}, {new_stream, NotifyPid}, #connection{ streams=Streams, diff --git a/test/client_server_SUITE.erl b/test/client_server_SUITE.erl index 071f8223..34d9beff 100644 --- a/test/client_server_SUITE.erl +++ b/test/client_server_SUITE.erl @@ -120,8 +120,7 @@ basic_push(_Config) -> ?assertEqual(0, (h2_stream_set:their_active_count(Streams))), MyActiveStreams = h2_stream_set:my_active_streams(Streams), - ?assertEqual(1, (length(MyActiveStreams))), - ?assertEqual(1, (h2_stream_set:stream_id(hd(MyActiveStreams)))), + ?assertEqual(0, (length(MyActiveStreams))), %% This closed stream should be GC'ed TheirActiveStreams = h2_stream_set:their_active_streams(Streams), ?assertEqual(12, (length(TheirActiveStreams))),