Commit 094f580
committed
mod_http2: RST_STREAM an incomplete response on the legacy c2 path
On builds without AP_HAS_RESPONSE_BUCKETS (httpd 2.4.x), the h2 worker
runs the c2 connection through h2_c2_process()/c2_process() rather than
the generic ap_process_connection(). c2_process() closes the output beam
unconditionally when the handler returns, so a response that started but
never finished (no EOS, e.g. a CGI that hits the server Timeout
mid-body) leaves a closed beam that h2_beam_is_complete() reports as
complete. s_c2_done() then sends no reset, and stream_data_cb()'s reset
fires only on a c1 re-dispatch that is lost under load, so the stream is
parked and a client without a stall timeout hangs.
When c2_process() finishes with a final response started but no EOS seen
(response_eos_seen, from the preceding commit), abort the output beam
instead of closing it; an aborted beam returns APR_ECONNABORTED from
h2_beam_receive() on the next pull, so the reset fires regardless of the
wakeup. Header-only responses (204/304, and HEAD) are marked complete on
this path too (h2_c2_filter.c) so they are not aborted.
Adds test_h2_105_20: a CGI that goes silent past Timeout, run as
concurrent streams, must be reset.1 parent 85a7f40 commit 094f580
4 files changed
Lines changed: 86 additions & 2 deletions
File tree
- modules/http2
- test/modules/http2
- htdocs/cgi
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
824 | 824 | | |
825 | 825 | | |
826 | 826 | | |
827 | | - | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
828 | 841 | | |
829 | 842 | | |
830 | 843 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
549 | 549 | | |
550 | 550 | | |
551 | 551 | | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
552 | 558 | | |
553 | 559 | | |
554 | 560 | | |
| |||
757 | 763 | | |
758 | 764 | | |
759 | 765 | | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
760 | 770 | | |
761 | 771 | | |
762 | 772 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
166 | 166 | | |
167 | 167 | | |
168 | 168 | | |
169 | | - | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
170 | 218 | | |
171 | 219 | | |
172 | 220 | | |
| |||
0 commit comments