After the commit introducing rt-tree based retransmit
queue, skb(s) that have been transmitted by a subflow are moved to rt-tree
rtx_queue and deleted from sk_write_queue. If the subflows have different
sending rate, the slower subflow will miss those skb if it doesn't check the
rtx_queue. To follow the semantic meaning of the Redundant scheduler, the
slower subflow should also transmit the unACKed segment in rtx_queue.
To fix this, check both skb_queue_empty and tcp_rtx_queue_empty when select next_segment and tcp_rtx_queue_head when selects skb. Pull request #391 should do it.
After the commit introducing rt-tree based retransmit queue, skb(s) that have been transmitted by a subflow are moved to rt-tree rtx_queue and deleted from sk_write_queue. If the subflows have different sending rate, the slower subflow will miss those skb if it doesn't check the rtx_queue. To follow the semantic meaning of the Redundant scheduler, the slower subflow should also transmit the unACKed segment in rtx_queue.
To fix this, check both skb_queue_empty and tcp_rtx_queue_empty when select next_segment and tcp_rtx_queue_head when selects skb. Pull request #391 should do it.