summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qeventdispatcher_winrt.cpp
diff options
context:
space:
mode:
authorJonathan Liu <net147@gmail.com>2014-09-18 19:54:46 +1000
committerJonathan Liu <net147@gmail.com>2014-09-23 00:47:34 +0200
commit7b7ad02681f2c28fb18d053618f6804e989b2f56 (patch)
treec79a8a04b4352f2ffac6b63a449d73c53787bd2e /src/corelib/kernel/qeventdispatcher_winrt.cpp
parenta6316e6e744815c89b2d7bd7946e04549d183769 (diff)
Improve checking for event/socket notifiers and timers
Starting/stopping timers from another thread may result in errors that may not appear until hours, days or weeks after if a release build of Qt is used with the GLib/UNIX event dispatchers. Such errors may manifest as warnings such as "QObject::killTimer(): Error: timer id 7 is not valid for object 0x2a51b488 (), timer has not been killed" and application crashes (e.g. crashes in malloc, realloc and malloc_consolidate). Initial-patch-by: Eike Ziller <eike.ziller@digia.com> Task-number: QTBUG-40636 Change-Id: I2de50d50eb1fc7467fcebb9c73b74d2f85137933 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_winrt.cpp')
-rw-r--r--src/corelib/kernel/qeventdispatcher_winrt.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_winrt.cpp b/src/corelib/kernel/qeventdispatcher_winrt.cpp
index aec0981677..d75d30f48e 100644
--- a/src/corelib/kernel/qeventdispatcher_winrt.cpp
+++ b/src/corelib/kernel/qeventdispatcher_winrt.cpp
@@ -254,13 +254,15 @@ void QEventDispatcherWinRT::registerTimer(int timerId, int interval, Qt::TimerTy
{
Q_UNUSED(timerType);
+#ifndef QT_NO_DEBUG
if (timerId < 1 || interval < 0 || !object) {
qWarning("QEventDispatcherWinRT::registerTimer: invalid arguments");
return;
} else if (object->thread() != thread() || thread() != QThread::currentThread()) {
- qWarning("QObject::startTimer: timers cannot be started from another thread");
+ qWarning("QEventDispatcherWinRT::registerTimer: timers cannot be started from another thread");
return;
}
+#endif
Q_D(QEventDispatcherWinRT);
@@ -289,14 +291,16 @@ void QEventDispatcherWinRT::registerTimer(int timerId, int interval, Qt::TimerTy
bool QEventDispatcherWinRT::unregisterTimer(int timerId)
{
+#ifndef QT_NO_DEBUG
if (timerId < 1) {
qWarning("QEventDispatcherWinRT::unregisterTimer: invalid argument");
return false;
}
if (thread() != QThread::currentThread()) {
- qWarning("QObject::killTimer: timers cannot be stopped from another thread");
+ qWarning("QEventDispatcherWinRT::unregisterTimer: timers cannot be stopped from another thread");
return false;
}
+#endif
Q_D(QEventDispatcherWinRT);
@@ -310,15 +314,17 @@ bool QEventDispatcherWinRT::unregisterTimer(int timerId)
bool QEventDispatcherWinRT::unregisterTimers(QObject *object)
{
+#ifndef QT_NO_DEBUG
if (!object) {
qWarning("QEventDispatcherWinRT::unregisterTimers: invalid argument");
return false;
}
QThread *currentThread = QThread::currentThread();
if (object->thread() != thread() || thread() != currentThread) {
- qWarning("QObject::killTimers: timers cannot be stopped from another thread");
+ qWarning("QEventDispatcherWinRT::unregisterTimers: timers cannot be stopped from another thread");
return false;
}
+#endif
Q_D(QEventDispatcherWinRT);
for (QHash<int, WinRTTimerInfo *>::iterator it = d->timerDict.begin(); it != d->timerDict.end();) {