aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2019-10-18 17:28:21 +0200
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2019-10-22 07:05:00 +0200
commit1e94466b06190061a86e9918c5e45279171e600f (patch)
tree6496f4b37c0ee6de24d16554933b7e345af9340e /src
parenta9bf6e652aa99784343c94b0181c9443205e2a82 (diff)
QQmlIncubationController: remove a possible signed integer overflow
Port incubateFor / incubateWhile to qint64. Since the implementation was doing calculations in nanoseconds, a few seconds incubation was sufficient to cause an int overflow. Change-Id: Iba68260a1fd62613aec17ba990ead221c0f7da10 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqmlincubator.cpp6
-rw-r--r--src/qml/qml/qqmlvme_p.h14
2 files changed, 10 insertions, 10 deletions
diff --git a/src/qml/qml/qqmlincubator.cpp b/src/qml/qml/qqmlincubator.cpp
index d9c965d3ea..4911cd2879 100644
--- a/src/qml/qml/qqmlincubator.cpp
+++ b/src/qml/qml/qqmlincubator.cpp
@@ -403,7 +403,7 @@ void QQmlIncubationController::incubateFor(int msecs)
if (!d || !d->incubatorCount)
return;
- QQmlInstantiationInterrupt i(msecs * 1000000);
+ QQmlInstantiationInterrupt i(msecs * Q_INT64_C(1000000));
i.reset();
do {
static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i);
@@ -422,7 +422,7 @@ void QQmlIncubationController::incubateWhile(volatile bool *flag, int msecs)
if (!d || !d->incubatorCount)
return;
- QQmlInstantiationInterrupt i(flag, msecs * 1000000);
+ QQmlInstantiationInterrupt i(flag, msecs * Q_INT64_C(1000000));
i.reset();
do {
static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i);
@@ -447,7 +447,7 @@ void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs)
if (!d || !d->incubatorCount)
return;
- QQmlInstantiationInterrupt i(flag, msecs * 1000000);
+ QQmlInstantiationInterrupt i(flag, msecs * Q_INT64_C(1000000));
i.reset();
do {
static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i);
diff --git a/src/qml/qml/qqmlvme_p.h b/src/qml/qml/qqmlvme_p.h
index 32b1631271..05a78a17fe 100644
--- a/src/qml/qml/qqmlvme_p.h
+++ b/src/qml/qml/qqmlvme_p.h
@@ -100,9 +100,9 @@ class QQmlInstantiationInterrupt {
public:
inline QQmlInstantiationInterrupt();
// ### Qt 6: remove
- inline QQmlInstantiationInterrupt(volatile bool *runWhile, int nsecs=0);
- inline QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, int nsecs = 0);
- inline QQmlInstantiationInterrupt(int nsecs);
+ inline QQmlInstantiationInterrupt(volatile bool *runWhile, qint64 nsecs=0);
+ inline QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, qint64 nsecs = 0);
+ inline QQmlInstantiationInterrupt(qint64 nsecs);
inline void reset();
inline bool shouldInterrupt() const;
@@ -110,7 +110,7 @@ private:
enum Mode { None, Time, LegacyFlag, Flag }; // ### Qt 6: remove LegacyFlag
Mode mode;
QElapsedTimer timer;
- int nsecs = 0;
+ qint64 nsecs = 0;
volatile bool *runWhileLegacy = nullptr; // ### Qt 6: remove
std::atomic<bool> *runWhile = nullptr;
};
@@ -156,17 +156,17 @@ QQmlInstantiationInterrupt::QQmlInstantiationInterrupt()
{
}
-QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(volatile bool *runWhile, int nsecs)
+QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(volatile bool *runWhile, qint64 nsecs)
: mode(LegacyFlag), nsecs(nsecs), runWhileLegacy(runWhile)
{
}
-QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, int nsecs)
+QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, qint64 nsecs)
: mode(Flag), nsecs(nsecs), runWhile(runWhile)
{
}
-QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(int nsecs)
+QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(qint64 nsecs)
: mode(Time), nsecs(nsecs)
{
}