Skip to content

Commit 9002663

Browse files
committed
fix fec seq wrap & insert seq caused by recent commits
1 parent 7f2921d commit 9002663

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

fec.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,20 @@ type (
2121
dataShards int
2222
parityShards int
2323
shardSize int
24-
next uint32 // next seqid
25-
paws uint32 // Protect Against Wrapped Sequence numbers
26-
enc reedsolomon.Encoder
24+
next uint32 // next seqid
25+
paws uint32 // Protect Against Wrapped Sequence numbers
26+
rx []fecPacket // ordered receive queue
2727

28-
rx []fecPacket // ordered receive queue
28+
// caches
2929
decodeCache [][]byte
3030
encodeCache [][]byte
3131
shardsflag []bool
32+
33+
// RS encoder
34+
enc reedsolomon.Encoder
3235
}
3336

37+
// fecPacket is a decoded FEC packet
3438
fecPacket struct {
3539
seqid uint32
3640
flag uint16
@@ -99,7 +103,7 @@ func (fec *FEC) Decode(pkt fecPacket) (recovered [][]byte) {
99103
if pkt.seqid == fec.rx[i].seqid { // de-duplicate
100104
xmitBuf.Put(pkt.data)
101105
return nil
102-
} else if pkt.seqid > fec.rx[i].seqid { // insertion
106+
} else if _itimediff(pkt.seqid, fec.rx[i].seqid) > 0 { // insertion
103107
insertIdx = i + 1
104108
break
105109
}
@@ -128,6 +132,7 @@ func (fec *FEC) Decode(pkt fecPacket) (recovered [][]byte) {
128132
searchEnd = len(fec.rx) - 1
129133
}
130134

135+
// re-construct datashards
131136
if searchEnd > searchBegin && searchEnd-searchBegin+1 >= fec.dataShards {
132137
numshard := 0
133138
numDataShard := 0

0 commit comments

Comments
 (0)