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
This commit is contained in:
parent
334790ea6b
commit
a610bb2120
@ -517,6 +517,9 @@ sctp_ss_prio_select(struct sctp_tcb *stcb SCTP_UNUSED, struct sctp_nets *net,
|
||||
{
|
||||
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, struct sctp_nets *net,
|
||||
{
|
||||
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_nets *net,
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user