mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-23 03:05:59 +02:00
Fix sequence number crash
This commit is contained in:
parent
06bbb7c4f1
commit
fcec53bdce
2 changed files with 6 additions and 3 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue