diff options
author | Kai Koehne <kai.koehne@nokia.com> | 2012-04-24 14:39:38 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-25 14:26:42 +0200 |
commit | 0d284ae2d62707e6c35c8d97ca73e974d35c4167 (patch) | |
tree | d41e0e0c64486a43c45db2c6a8ad3e1a9fba6ec9 /src/qml/debugger/qqmlprofilerservice_p.h | |
parent | e1583664fd8a9eb66e37bdd2e1476bbf90383a4c (diff) |
Debugger: Fix race conditions in block mode
Using waitForMessage() in the constructor after registerService() is
_not_ safe: You might get the first message already after the
registerService() and before the waitForMessage() call. Instead,
use QMutex/QWaitCondition to block the initialization. Also make
the use of the block mode explicit, since the service might already
be enabled also for non-blocking modes ...
Change-Id: I387bfe0627c80e2029acff71f86d12cd9ab58de1
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
Diffstat (limited to 'src/qml/debugger/qqmlprofilerservice_p.h')
-rw-r--r-- | src/qml/debugger/qqmlprofilerservice_p.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/qml/debugger/qqmlprofilerservice_p.h b/src/qml/debugger/qqmlprofilerservice_p.h index 208fde5a75..eeaf871ab4 100644 --- a/src/qml/debugger/qqmlprofilerservice_p.h +++ b/src/qml/debugger/qqmlprofilerservice_p.h @@ -61,6 +61,7 @@ #include <QtCore/qmutex.h> #include <QtCore/qvector.h> #include <QtCore/qstringbuilder.h> +#include <QtCore/qwaitcondition.h> QT_BEGIN_HEADER @@ -164,9 +165,10 @@ private: private: QElapsedTimer m_timer; bool m_enabled; - bool m_messageReceived; QVector<QQmlProfilerData> m_data; - QMutex m_mutex; + QMutex m_dataMutex; + QMutex m_initializeMutex; + QWaitCondition m_initializeCondition; static QQmlProfilerService *instance; |