From a7ca8b1a2864e47cacd530f6b10d2b415c5193f7 Mon Sep 17 00:00:00 2001 From: Andreas Buhr Date: Thu, 28 Jan 2021 10:54:42 +0100 Subject: [PATCH] Safer setting of interval in QTimer There are two methods which set the interval and do things afterwards. Setting the interval might trigger other code. This patch uses setValueBypassingBindings and marks the interval dirty later, just to be safe. Change-Id: I2cae3e4a9f040007dfd246c424250034e8df10a0 Reviewed-by: Fabian Kosmale Reviewed-by: Ivan Solovev --- src/corelib/kernel/qtimer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index b553bbd5d3..8148ced222 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -257,8 +257,9 @@ void QTimer::start() void QTimer::start(int msec) { Q_D(QTimer); - d->inter = msec; + d->inter.setValueBypassingBindings(msec); start(); + d->inter.markDirty(); } @@ -752,13 +753,14 @@ QBindable QTimer::bindableSingleShot() void QTimer::setInterval(int msec) { Q_D(QTimer); - d->inter = msec; + d->inter.setValueBypassingBindings(msec); if (d->id != INV_TIMER) { // create new timer QObject::killTimer(d->id); // restart timer d->id = QObject::startTimer(msec, d->type); // No need to call markDirty() for d->isActiveData here, // as timer state actually does not change } + d->inter.markDirty(); } int QTimer::interval() const