Author: tuexen
Date: Mon Feb 17 18:05:03 2020
New Revision: 358028
URL: https://svnweb.freebsd.org/changeset/base/358028

Log:
  Fix the non-default stream schedulers such that do not interleave
  user messages when it is now allowed.
  
  Thanks to Christian Wright for reporting the issue for the userland
  stack and providing a fix for the priority scheduler.
  
  MFC after:            1 week

Modified:
  head/sys/netinet/sctp_ss_functions.c

Modified: head/sys/netinet/sctp_ss_functions.c
==============================================================================
--- head/sys/netinet/sctp_ss_functions.c        Mon Feb 17 15:32:21 2020        
(r358027)
+++ head/sys/netinet/sctp_ss_functions.c        Mon Feb 17 18:05:03 2020        
(r358028)
@@ -517,6 +517,9 @@ sctp_ss_prio_select(struct sctp_tcb *stcb SCTP_UNUSED,
 {
        struct sctp_stream_out *strq, *strqt, *strqn;
 
+       if (asoc->ss_data.locked_on_sending) {
+               return (asoc->ss_data.locked_on_sending);
+       }
        strqt = asoc->ss_data.last_out_stream;
 prio_again:
        /* Find the next stream to use */
@@ -694,6 +697,9 @@ sctp_ss_fb_select(struct sctp_tcb *stcb SCTP_UNUSED, s
 {
        struct sctp_stream_out *strq = NULL, *strqt;
 
+       if (asoc->ss_data.locked_on_sending) {
+               return (asoc->ss_data.locked_on_sending);
+       }
        if (asoc->ss_data.last_out_stream == NULL ||
            TAILQ_FIRST(&asoc->ss_data.out.wheel) == 
TAILQ_LAST(&asoc->ss_data.out.wheel, sctpwheel_listhead)) {
                strqt = TAILQ_FIRST(&asoc->ss_data.out.wheel);
@@ -900,6 +906,9 @@ sctp_ss_fcfs_select(struct sctp_tcb *stcb SCTP_UNUSED,
        struct sctp_stream_out *strq;
        struct sctp_stream_queue_pending *sp;
 
+       if (asoc->ss_data.locked_on_sending) {
+               return (asoc->ss_data.locked_on_sending);
+       }
        sp = TAILQ_FIRST(&asoc->ss_data.out.list);
 default_again:
        if (sp != NULL) {
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to