From c92732fd98f3635ce6b5402a103540cf7bfd626e Mon Sep 17 00:00:00 2001
From: Volker Krause <vkrause@kde.org>
Date: Tue, 20 Dec 2016 11:45:49 +0100
Subject: [PATCH] Don't leak line series of area plots

This fixes dangling line series crashing when the model they still listen
to resets.
---
 analyzer/analytics/analyticsview.cpp | 2 +-
 analyzer/chart.cpp                   | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/analyzer/analytics/analyticsview.cpp b/analyzer/analytics/analyticsview.cpp
index acc556f..e0df60f 100644
--- a/analyzer/analytics/analyticsview.cpp
+++ b/analyzer/analytics/analyticsview.cpp
@@ -116,9 +116,9 @@ void AnalyticsView::setRESTClient(RESTClient* client)
 
 void AnalyticsView::setProduct(const Product& product)
 {
+    m_chart->setModel(nullptr);
     m_dataModel->setProduct(product);
 
-    m_chart->setModel(nullptr);
     ui->chartType->clear();
     m_aggregatedDataModel->clear();
     qDeleteAll(m_aggregationModels);
diff --git a/analyzer/chart.cpp b/analyzer/chart.cpp
index 419719e..bd7f7a5 100644
--- a/analyzer/chart.cpp
+++ b/analyzer/chart.cpp
@@ -70,8 +70,10 @@ void Chart::setModel(QAbstractItemModel* model)
         disconnect(m_model, &QAbstractItemModel::modelReset, this, &Chart::modelReset);
 
     m_model = model;
-    if (!model)
+    if (!model) {
+        m_chart->removeAllSeries();
         return;
+    }
 
     connect(m_model, &QAbstractItemModel::modelReset, this, &Chart::modelReset);
     modelReset();
@@ -111,7 +113,7 @@ void Chart::modelReset()
     } else {
         QLineSeries *prevSeries = nullptr;
         for (int i = 1; i < colCount; ++i) {
-            auto series = new QLineSeries(this);
+            auto series = new QLineSeries;
 
             auto mapper = new QVXYModelMapper(series);
             mapper->setModel(m_model);
@@ -121,6 +123,7 @@ void Chart::modelReset()
             mapper->setSeries(series);
 
             auto areaSeries = new QAreaSeries(series, prevSeries);
+            series->setParent(areaSeries); // otherwise series isn't deleted by removeAllSeries!
             areaSeries->setName(m_model->headerData(i, Qt::Horizontal).toString().toHtmlEscaped());
             m_chart->addSeries(areaSeries);
 
-- 
GitLab