diff --git a/lib/ngtcp2_strm.c b/lib/ngtcp2_strm.c index 2a0c0c918982323dd8439a74f512e58d56d8c7e3..7c46d9b64711106292db5ba6fcd8855a9ca9438e 100644 --- a/lib/ngtcp2_strm.c +++ b/lib/ngtcp2_strm.c @@ -367,6 +367,12 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, if (left == 0) { /* datalen could be zero if 0 length STREAM has been sent */ if (datalen || ngtcp2_ksl_len(strm->tx.streamfrq) > 1) { + rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &fr->offset, frc); + if (rv != 0) { + assert(ngtcp2_err_is_fatal(rv)); + ngtcp2_frame_chain_del(frc, strm->mem); + return rv; + } *pfrc = NULL; return 0; } diff --git a/tests/ngtcp2_strm_test.c b/tests/ngtcp2_strm_test.c index 21f0ecd1886372761271cfc16bf86be2b0c85502..8d2d23d2adbc1792ed30a378f5b160d2e6734835 100644 --- a/tests/ngtcp2_strm_test.c +++ b/tests/ngtcp2_strm_test.c @@ -290,6 +290,17 @@ void test_ngtcp2_strm_streamfrq_pop(void) { ngtcp2_frame_chain_del(frc, mem); ngtcp2_strm_free(&strm); + + /* left == 0 and there is outstanding data */ + setup_strm_streamfrq_fixture(&strm, mem); + + frc = NULL; + rv = ngtcp2_strm_streamfrq_pop(&strm, &frc, 0); + + CU_ASSERT(0 == rv); + CU_ASSERT(NULL == frc); + + ngtcp2_strm_free(&strm); } void test_ngtcp2_strm_streamfrq_unacked_offset(void) {