()
| 107 | } |
| 108 | |
| 109 | func (r *Reader) processOOOPacketsLocked() { |
| 110 | if len(r.oooPackets) == 0 { |
| 111 | return |
| 112 | } |
| 113 | sort.Slice(r.oooPackets, func(i, j int) bool { |
| 114 | return r.oooPackets[i].Seq < r.oooPackets[j].Seq |
| 115 | }) |
| 116 | consumed := 0 |
| 117 | for _, pkt := range r.oooPackets { |
| 118 | if r.eof || r.err != nil { |
| 119 | // we're done, so we can clear any pending ooo packets |
| 120 | r.oooPackets = nil |
| 121 | return |
| 122 | } |
| 123 | if pkt.Seq != r.nextSeq { |
| 124 | break |
| 125 | } |
| 126 | r.recvDataOrderedLocked(pkt) |
| 127 | consumed++ |
| 128 | } |
| 129 | r.oooPackets = r.oooPackets[consumed:] |
| 130 | } |
| 131 | |
| 132 | func (r *Reader) sendAckLocked(fin bool, cancel bool, errStr string) { |
| 133 | rwnd := r.readWindow - int64(len(r.buffer)) |
no test coverage detected