Author: tuexen
Date: Sun Jan 17 12:02:04 2016
New Revision: 294207
URL: https://svnweb.freebsd.org/changeset/base/294207

Log:
  MFC r291410:
  Take also the send queue and sent queue into account when triggering
  the sending of outgoing stream reset requests.

Modified:
  stable/10/sys/netinet/sctp_output.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/netinet/sctp_output.c
==============================================================================
--- stable/10/sys/netinet/sctp_output.c Sun Jan 17 11:59:42 2016        
(r294206)
+++ stable/10/sys/netinet/sctp_output.c Sun Jan 17 12:02:04 2016        
(r294207)
@@ -7169,7 +7169,8 @@ one_more_time:
                        }
                        atomic_subtract_int(&asoc->stream_queue_cnt, 1);
                        TAILQ_REMOVE(&strq->outqueue, sp, next);
-                       if (strq->state == SCTP_STREAM_RESET_PENDING &&
+                       if ((strq->state == SCTP_STREAM_RESET_PENDING) &&
+                           (strq->chunks_on_queues == 0) &&
                            TAILQ_EMPTY(&strq->outqueue)) {
                                stcb->asoc.trigger_reset = 1;
                        }
@@ -7571,7 +7572,8 @@ dont_do_it:
                        send_lock_up = 1;
                }
                TAILQ_REMOVE(&strq->outqueue, sp, next);
-               if (strq->state == SCTP_STREAM_RESET_PENDING &&
+               if ((strq->state == SCTP_STREAM_RESET_PENDING) &&
+                   (strq->chunks_on_queues == 0) &&
                    TAILQ_EMPTY(&strq->outqueue)) {
                        stcb->asoc.trigger_reset = 1;
                }
@@ -11577,7 +11579,8 @@ sctp_add_stream_reset_out(struct sctp_tc
        /* now how long will this param be? */
        for (i = 0; i < stcb->asoc.streamoutcnt; i++) {
                if ((stcb->asoc.strmout[i].state == SCTP_STREAM_RESET_PENDING) 
&&
-                   (TAILQ_EMPTY(&stcb->asoc.strmout[i].outqueue))) {
+                   (stcb->asoc.strmout[i].chunks_on_queues == 0) &&
+                   TAILQ_EMPTY(&stcb->asoc.strmout[i].outqueue)) {
                        number_entries++;
                }
        }
@@ -11600,7 +11603,8 @@ sctp_add_stream_reset_out(struct sctp_tc
        if (number_entries) {
                for (i = 0; i < stcb->asoc.streamoutcnt; i++) {
                        if ((stcb->asoc.strmout[i].state == 
SCTP_STREAM_RESET_PENDING) &&
-                           (TAILQ_EMPTY(&stcb->asoc.strmout[i].outqueue))) {
+                           (stcb->asoc.strmout[i].chunks_on_queues == 0) &&
+                           TAILQ_EMPTY(&stcb->asoc.strmout[i].outqueue)) {
                                req_out->list_of_streams[at] = htons(i);
                                at++;
                                stcb->asoc.strmout[i].state = 
SCTP_STREAM_RESET_IN_FLIGHT;
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to