@bryancall It seems to me that streams are not removed from `stream_list` when 
ATS *send* RST_STREAM frames. This explains the `find_stream` mystery @shinrich 
pointed out.

I have no idea what changes led the crash and how the crash is occurred, but 
here's my assumption:

I assume `stream` is not nullptr and the stream state is CLOSED, because your 
patch checks those.

Because newly created streams cannot be CLOSED state here, the stream should be 
receiving second HEADERS frame on CLOSED state. This suggests that 
`cstate.is_valid_streamid(stream_id)` was `true` and `stream == nullptr` was 
`true` too.

If `stream->has_trailing_header()` was `false` an  Http2Error had been 
returned, but it hadn't. So the requests should have trailing headers. Can you 
confirm this?

If ATS sent a RST_STREAM frame before receiving trailing headers (second 
HEADERS frame), it would reach here with the conditions (valid stream id and 
closed state) because we can find the stream from `stream_list`. But I don't 
understand how it crashes with an stream that is still alive.

[ Full content available at: https://github.com/apache/trafficserver/pull/4225 ]
This message was relayed via gitbox.apache.org for devnull@infra.apache.org

Reply via email to