Fix timeout calculations using qt_subtract_from_timeout

Commit ed0c0070 introduced qt_subtract_from_timeout but used it
incorrectly in several places.

Change-Id: I80ea16088707929a45d5a61ec6f3370f8e63d1cd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
This commit is contained in:
Joerg Bornemann 2015-12-21 11:37:49 +01:00
parent 1823c8f2dd
commit e96fa5a780
2 changed files with 13 additions and 9 deletions

View File

@ -364,7 +364,7 @@ bool QWinOverlappedIoNotifier::waitForNotified(int msecs, OVERLAPPED *overlapped
return false;
if (triggeredOverlapped == overlapped)
return true;
msecs = qt_subtract_from_timeout(msecs, stopWatch.elapsed());
t = qt_subtract_from_timeout(msecs, stopWatch.elapsed());
if (t == 0)
return false;
}

View File

@ -169,14 +169,16 @@ static bool doSocketRead(QTcpSocket *socket, int minBytesAvailable, int timeout
{
QElapsedTimer timer;
timer.start();
int t = timeout;
forever {
if (socket->bytesAvailable() >= minBytesAvailable)
return true;
timeout = qt_subtract_from_timeout(timeout, timer.elapsed());
if (socket->state() == QAbstractSocket::UnconnectedState
|| timeout == 0)
if (socket->state() == QAbstractSocket::UnconnectedState)
return false;
if (!socket->waitForReadyRead(timeout))
if (!socket->waitForReadyRead(t))
return false;
t = qt_subtract_from_timeout(timeout, timer.elapsed());
if (t == 0)
return false;
}
}
@ -197,6 +199,7 @@ static bool doSocketFlush(QTcpSocket *socket, int timeout = 4000)
#endif
QTime timer;
timer.start();
int t = timeout;
forever {
if (socket->bytesToWrite() == 0
#ifndef QT_NO_SSL
@ -204,11 +207,12 @@ static bool doSocketFlush(QTcpSocket *socket, int timeout = 4000)
#endif
)
return true;
timeout = qt_subtract_from_timeout(timeout, timer.elapsed());
if (socket->state() == QAbstractSocket::UnconnectedState
|| timeout == 0)
if (socket->state() == QAbstractSocket::UnconnectedState)
return false;
if (!socket->waitForBytesWritten(timeout))
if (!socket->waitForBytesWritten(t))
return false;
t = qt_subtract_from_timeout(timeout, timer.elapsed());
if (t == 0)
return false;
}
}