From 6ff4a0b58668ff572a1942405161e2db98238b87 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen <christiaan.janssen@nokia.com> Date: Mon, 26 Mar 2012 16:20:09 +0200 Subject: [PATCH] QmlProfiler: flush on new trace Discard pending data if a new trace arrives while an old one was still being processed. If we don't, the data of both traces gets mixed, leading to a possible crash. Change-Id: Ibba7df06f6a4b7e93d00f6fa1fa4802baf3a1731 Reviewed-by: Kai Koehne <kai.koehne@nokia.com> --- src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp | 7 +++++++ src/plugins/qmlprofiler/qmlprofilerclientmanager.h | 1 + src/plugins/qmlprofiler/qmlprofilertool.cpp | 1 + 3 files changed, 9 insertions(+) diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp index 01a0d787a2d..a9002aa85b8 100644 --- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp @@ -123,6 +123,13 @@ void QmlProfilerClientManager::clearBufferedData() d->v8clientplugin.data()->clearData(); } +void QmlProfilerClientManager::discardPendingData() +{ + if (d->connection) + d->connection->flush(); + clearBufferedData(); +} + //////////////////////////////////////////////////////////////// // Internal void QmlProfilerClientManager::connectClient(quint16 port) diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.h b/src/plugins/qmlprofiler/qmlprofilerclientmanager.h index 35766e7a5a8..0ee061993a6 100644 --- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.h +++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.h @@ -55,6 +55,7 @@ public: void setOstConnection(QString ostDevice); void clearBufferedData(); + void discardPendingData(); signals: void connectionFailed(); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 46bf8b6085b..6a16546e1a1 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -476,6 +476,7 @@ void QmlProfilerTool::updateTimeDisplay() void QmlProfilerTool::clearData() { d->m_profilerDataModel->clear(); + d->m_profilerConnections->discardPendingData(); } void QmlProfilerTool::clearDisplay() -- GitLab