File: lib/ruby-h2/http-agent.rb:551–563
After receiving GOAWAY, the case block allows DATA, HEADERS, PUSH_PROMISE, CONTINUATION, GZIPPED_DATA, and DROPPED_FRAME through for processing, but drops SETTINGS, PING, WINDOW_UPDATE, RST_STREAM, and PRIORITY via the else clause.
This is backwards:
- SETTINGS must still be ACK'd for clean shutdown.
- PING must still be PONG'd.
- WINDOW_UPDATE must still be processed to drain in-flight data on already-open streams.
- RST_STREAM for active streams should still be handled.
Meanwhile, DATA and HEADERS that pass through the filter hit internal return if @goaway checks or conditional emit guards, so they mostly no-op anyway.
File:
lib/ruby-h2/http-agent.rb:551–563After receiving GOAWAY, the
caseblock allows DATA, HEADERS, PUSH_PROMISE, CONTINUATION, GZIPPED_DATA, and DROPPED_FRAME through for processing, but drops SETTINGS, PING, WINDOW_UPDATE, RST_STREAM, and PRIORITY via theelseclause.This is backwards:
Meanwhile, DATA and HEADERS that pass through the filter hit internal
return if @goawaychecks or conditional emit guards, so they mostly no-op anyway.