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