| 611 | |
| 612 | |
| 613 | static void c1_purge_streams(h2_mplx *m) |
| 614 | { |
| 615 | h2_stream *stream; |
| 616 | int i; |
| 617 | |
| 618 | for (i = 0; i < m->spurge->nelts; ++i) { |
| 619 | stream = APR_ARRAY_IDX(m->spurge, i, h2_stream*); |
| 620 | ap_assert(stream->state == H2_SS_CLEANUP); |
| 621 | |
| 622 | if (stream->input) { |
| 623 | h2_beam_destroy(stream->input, m->c1); |
| 624 | stream->input = NULL; |
| 625 | } |
| 626 | if (stream->c2) { |
| 627 | conn_rec *c2 = stream->c2; |
| 628 | h2_conn_ctx_t *c2_ctx = h2_conn_ctx_get(c2); |
| 629 | h2_c2_transit *transit; |
| 630 | |
| 631 | stream->c2 = NULL; |
| 632 | ap_assert(c2_ctx); |
| 633 | transit = c2_ctx->transit; |
| 634 | h2_c2_destroy(c2); /* c2_ctx is gone as well */ |
| 635 | if (transit) { |
| 636 | c2_transit_recycle(m, transit); |
| 637 | } |
| 638 | } |
| 639 | h2_stream_destroy(stream); |
| 640 | } |
| 641 | apr_array_clear(m->spurge); |
| 642 | } |
| 643 | |
| 644 | void h2_mplx_c1_going_keepalive(h2_mplx *m) |
| 645 | { |
no test coverage detected