summaryrefslogtreecommitdiffstats
path: root/sys/netinet/sctp_timer.c
diff options
context:
space:
mode:
authortuexen <tuexen@FreeBSD.org>2016-01-17 12:07:47 +0000
committertuexen <tuexen@FreeBSD.org>2016-01-17 12:07:47 +0000
commit7daacffc9c358ba8b9bc8b386373a9698604ca4c (patch)
tree76ad7e798444f03f4bb1b8c2cf8b281129d2906f /sys/netinet/sctp_timer.c
parentd541ac04b1d4311d9e13378b076f9270615490d2 (diff)
downloadFreeBSD-src-7daacffc9c358ba8b9bc8b386373a9698604ca4c.zip
FreeBSD-src-7daacffc9c358ba8b9bc8b386373a9698604ca4c.tar.gz
MFC r291700:
Ensure that outgoing streams get reset when they run dry.
Diffstat (limited to 'sys/netinet/sctp_timer.c')
-rw-r--r--sys/netinet/sctp_timer.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/netinet/sctp_timer.c b/sys/netinet/sctp_timer.c
index bbb7306..0d684b3 100644
--- a/sys/netinet/sctp_timer.c
+++ b/sys/netinet/sctp_timer.c
@@ -442,6 +442,11 @@ sctp_recover_sent_list(struct sctp_tcb *stcb)
asoc->strmout[chk->rec.data.stream_number].chunks_on_queues--;
}
}
+ if ((asoc->strmout[chk->rec.data.stream_number].chunks_on_queues == 0) &&
+ (asoc->strmout[chk->rec.data.stream_number].state == SCTP_STREAM_RESET_PENDING) &&
+ TAILQ_EMPTY(&asoc->strmout[chk->rec.data.stream_number].outqueue)) {
+ asoc->trigger_reset = 1;
+ }
TAILQ_REMOVE(&asoc->sent_queue, chk, sctp_next);
if (PR_SCTP_ENABLED(chk->flags)) {
if (asoc->pr_sctp_cnt != 0)
OpenPOWER on IntegriCloud