diff options
author | Loïc Hoguin <[email protected]> | 2017-10-21 13:09:20 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2017-10-21 13:09:20 +0100 |
commit | c62ce1c63e2801640e36c7a480e9250ec8108d24 (patch) | |
tree | 8c8a135ee27fbc9c4f598c9172f4a0891fa31a30 /src/cowboy_http2.erl | |
parent | 1ef5a1c45bd56fb9080ff0195c5ea74f88bcd71a (diff) | |
download | cowboy-c62ce1c63e2801640e36c7a480e9250ec8108d24.tar.gz cowboy-c62ce1c63e2801640e36c7a480e9250ec8108d24.tar.bz2 cowboy-c62ce1c63e2801640e36c7a480e9250ec8108d24.zip |
Fix stream handler state being discarded on terminate
When we have to send a response before terminating a stream,
we call info. The state returned by this info call was
discarded when we called terminate after that. This commit
fixes it.
There are no tests for this, however the new metrics test
in the next commit requires the correct behavior so this
is ultimately covered.
Diffstat (limited to 'src/cowboy_http2.erl')
-rw-r--r-- | src/cowboy_http2.erl | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index dbd67cb..2b189e2 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -777,8 +777,9 @@ stream_terminate(State=#state{socket=Socket, transport=Transport, case lists:keytake(StreamID, #stream.id, Streams0) of %% When the stream terminates normally (without sending RST_STREAM) %% and no response was sent, we need to send a proper response back to the client. - {value, #stream{state=StreamState, local=idle}, Streams} when Reason =:= normal -> - State1 = info(State, StreamID, {response, 204, #{}, <<>>}), + {value, #stream{local=idle}, Streams} when Reason =:= normal -> + State1 = #state{streams=Streams1} = info(State, StreamID, {response, 204, #{}, <<>>}), + #stream{state=StreamState} = lists:keyfind(StreamID, #stream.id, Streams1), stream_call_terminate(StreamID, Reason, StreamState), Children = cowboy_children:shutdown(Children0, StreamID), State1#state{streams=Streams, children=Children}; |