Fixed Win32 QPC timestamp diff that caused extraordinarily large inter-packet timing

This commit is contained in:
Srivats P. 2012-03-09 22:15:06 +05:30
parent 87ee8244fc
commit 31c7f08e7c

View File

@ -59,7 +59,7 @@ static void inline getTimeStamp(TimeStamp* stamp)
static long inline udiffTimeStamp(const TimeStamp *start, const TimeStamp *end) static long inline udiffTimeStamp(const TimeStamp *start, const TimeStamp *end)
{ {
if (end->QuadPart > start->QuadPart) if (end->QuadPart >= start->QuadPart)
return (end->QuadPart - start->QuadPart)*long(1e6)/gTicksFreq; return (end->QuadPart - start->QuadPart)*long(1e6)/gTicksFreq;
else else
{ {
@ -531,6 +531,7 @@ _restart:
getTimeStamp(&ovrEnd); getTimeStamp(&ovrEnd);
overHead += seq->usecDuration_ overHead += seq->usecDuration_
- udiffTimeStamp(&ovrStart, &ovrEnd); - udiffTimeStamp(&ovrStart, &ovrEnd);
Q_ASSERT(overHead <= 0);
} }
if (stop_) if (stop_)
ret = -2; ret = -2;
@ -614,6 +615,7 @@ int PcapPort::PortTransmitter::sendQueueTransmit(pcap_t *p,
getTimeStamp(&ovrEnd); getTimeStamp(&ovrEnd);
overHead -= udiffTimeStamp(&ovrStart, &ovrEnd); overHead -= udiffTimeStamp(&ovrStart, &ovrEnd);
Q_ASSERT(overHead <= 0);
usec += overHead; usec += overHead;
if (usec > 0) if (usec > 0)
{ {