summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Rathgeb <maggu2810@googlemail.com>2012-04-16 22:31:51 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-24 12:48:38 +0200
commite998f971f6b7d05748b9478909c068605507d8f6 (patch)
tree55028dc5c7eb42c04f0321fa1fabf521ca718f4d /src
parent8643e1992f6c62983345f89d793742b3449a69ea (diff)
Fix QMutex::tryLock timeout regression (integer overflow)
The timeout given in milliseconds should be converted to a timespec struct. To separate the seconds and nanoseconds the milliseconds are first multiplied to represent the whole value in an int64 variable. The calculation is done on integers, so we get an overflow if the milliseconds are bigger then 2148. If we cast the given value to an int64 we can avoid this problem. Fix the used cast. Task-number: QTBUG-24795 Change-Id: I864ae227cf7dda16a6f30aa4db74acc49e20f6eb Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/thread/qmutex_linux.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/corelib/thread/qmutex_linux.cpp b/src/corelib/thread/qmutex_linux.cpp
index 1bb5e77e77..76e644ae51 100644
--- a/src/corelib/thread/qmutex_linux.cpp
+++ b/src/corelib/thread/qmutex_linux.cpp
@@ -121,7 +121,7 @@ bool QBasicMutex::lockInternal(int timeout)
struct timespec ts, *pts = 0;
if (timeout >= 1) {
// recalculate the timeout
- qint64 xtimeout = timeout * 1000 * 1000;
+ qint64 xtimeout = qint64(timeout) * 1000 * 1000;
xtimeout -= elapsedTimer.nsecsElapsed();
if (xtimeout <= 0) {
// timer expired after we returned