mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Fix data sent after RST_STREAM in HTTP/2 in rare cases
This commit is contained in:
parent
137e86de7b
commit
105edf1d6e
1 changed files with 8 additions and 3 deletions
|
@ -849,7 +849,13 @@ send_data(State0=#state{socket=Socket, transport=Transport, opts=Opts}, SendData
|
||||||
_ ->
|
_ ->
|
||||||
Transport:send(Socket, Data)
|
Transport:send(Socket, Data)
|
||||||
end || Data <- Acc],
|
end || Data <- Acc],
|
||||||
State.
|
send_data_terminate(State, SendData).
|
||||||
|
|
||||||
|
send_data_terminate(State, []) ->
|
||||||
|
State;
|
||||||
|
send_data_terminate(State0, [{StreamID, IsFin, _}|Tail]) ->
|
||||||
|
State = maybe_terminate_stream(State0, StreamID, IsFin),
|
||||||
|
send_data_terminate(State, Tail).
|
||||||
|
|
||||||
prepare_data(State, [], Acc, []) ->
|
prepare_data(State, [], Acc, []) ->
|
||||||
{lists:reverse(Acc), State};
|
{lists:reverse(Acc), State};
|
||||||
|
@ -859,8 +865,7 @@ prepare_data(State0, [{StreamID, IsFin, SendData}|Tail], Acc0, Buffer0) ->
|
||||||
{Acc, Buffer, State} = prepare_data(State0, StreamID, IsFin, SendData, Acc0, Buffer0),
|
{Acc, Buffer, State} = prepare_data(State0, StreamID, IsFin, SendData, Acc0, Buffer0),
|
||||||
prepare_data(State, Tail, Acc, Buffer).
|
prepare_data(State, Tail, Acc, Buffer).
|
||||||
|
|
||||||
prepare_data(State0, StreamID, IsFin, [], Acc, Buffer) ->
|
prepare_data(State, _, _, [], Acc, Buffer) ->
|
||||||
State = maybe_terminate_stream(State0, StreamID, IsFin),
|
|
||||||
{Acc, Buffer, State};
|
{Acc, Buffer, State};
|
||||||
prepare_data(State0, StreamID, IsFin, [FrameData|Tail], Acc, Buffer) ->
|
prepare_data(State0, StreamID, IsFin, [FrameData|Tail], Acc, Buffer) ->
|
||||||
FrameIsFin = case Tail of
|
FrameIsFin = case Tail of
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue