浏览代码

Avoid assert crash after bytestream position wrap around

Fixes #652.
tags/v1.8.90
Peter Åstrand (astrand) 6 年前
父节点
当前提交
c05fba745e
共有 1 个文件被更改,包括 7 次插入2 次删除
  1. 7
    2
      common/rfb/Congestion.cxx

+ 7
- 2
common/rfb/Congestion.cxx 查看文件

@@ -68,6 +68,11 @@ static const unsigned MINIMUM_WINDOW = 4096;
// limit for now...
static const unsigned MAXIMUM_WINDOW = 4194304;

// Compare position even when wrapped around
static inline bool isAfter(unsigned a, unsigned b) {
return (int)a - (int)b > 0;
}

static LogWriter vlog("Congestion");

Congestion::Congestion() :
@@ -230,7 +235,7 @@ int Congestion::getUncongestedETA()
targetAcked = lastPosition - congWindow;

// Simple case?
if (lastPong.pos > targetAcked)
if (isAfter(lastPong.pos, targetAcked))
return 0;

// No measurements yet?
@@ -269,7 +274,7 @@ int Congestion::getUncongestedETA()
etaNext -= delay;

// Found it?
if (curPing.pos > targetAcked) {
if (isAfter(curPing.pos, targetAcked)) {
eta += etaNext * (curPing.pos - targetAcked) / (curPing.pos - prevPing->pos);
if (elapsed > eta)
return 0;

正在加载...
取消
保存