Fix sequence number crash

This commit is contained in:
Atlante45 2015-07-31 15:09:58 -07:00
parent 06bbb7c4f1
commit fcec53bdce
2 changed files with 6 additions and 3 deletions

View file

@ -86,7 +86,7 @@ void SendQueue::ack(SequenceNumber ack) {
{ // remove any sequence numbers equal to or lower than this ACK in the loss list
QWriteLocker nakLocker(&_naksLock);
if (_naks.getLength() > 0) {
if (_naks.getLength() > 0 && _naks.getFirstSequenceNumber() <= ack) {
_naks.remove(_naks.getFirstSequenceNumber(), ack);
}
}

View file

@ -21,7 +21,8 @@ namespace udt {
class SequenceNumber {
public:
// Base type of sequence numbers
using Type = uint32_t;
using Type = int32_t;
using UType = uint32_t;
// Values are for 29 bit SequenceNumber
static const Type THRESHOLD = 0x0FFFFFFF; // threshold for comparing sequence numbers
@ -32,8 +33,10 @@ public:
// Only explicit conversions
explicit SequenceNumber(char* value) { _value = (*reinterpret_cast<int32_t*>(value)) & MAX; }
explicit SequenceNumber(Type value) { _value = (value <= MAX) ? value : MAX; }
explicit SequenceNumber(Type value) { _value = (value <= MAX) ? ((value >= 0) ? value : 0) : MAX; }
explicit SequenceNumber(UType value) { _value = (value <= MAX) ? value : MAX; }
explicit operator Type() { return _value; }
explicit operator UType() { return static_cast<UType>(_value); }
inline SequenceNumber& operator++() {
_value = (_value == MAX) ? 0 : ++_value;