aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2015-12-11 11:41:07 +0100
committerAnders Broman <a.broman58@gmail.com>2015-12-16 05:43:58 +0000
commite3dd3f97f1f2afe18501adcfac9400ddc3e3c0a5 (patch)
treeef70643e6425cd26c1a6186292985966c3a16569 /ui
parentfb0246c6fd7cd34b820558f75eb48bba6326b768 (diff)
Qt: fix memleaks related to interface dialog
Also fix a not-so-problematic recent files "leak" when quitting Wireshark. Change-Id: I8556b07c197f0934f93d6da8c573c47fbd3fc060 Reviewed-on: https://code.wireshark.org/review/12529 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r--ui/qt/capture_interfaces_dialog.cpp6
-rw-r--r--ui/qt/interface_tree.cpp24
-rw-r--r--ui/qt/wireshark_application.cpp5
3 files changed, 15 insertions, 20 deletions
diff --git a/ui/qt/capture_interfaces_dialog.cpp b/ui/qt/capture_interfaces_dialog.cpp
index 949b2128d8..088e2a71d4 100644
--- a/ui/qt/capture_interfaces_dialog.cpp
+++ b/ui/qt/capture_interfaces_dialog.cpp
@@ -107,6 +107,7 @@ class InterfaceTreeWidgetItem : public QTreeWidgetItem
public:
InterfaceTreeWidgetItem(QTreeWidget *tree) : QTreeWidgetItem(tree) {}
bool operator< (const QTreeWidgetItem &other) const;
+ QList<int> points;
};
CaptureInterfacesDialog::CaptureInterfacesDialog(QWidget *parent) :
@@ -459,8 +460,6 @@ void CaptureInterfacesDialog::updateInterfaces()
interface_t *device;
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
- QList<int> *points;
-
device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
/* Continue if capture device is hidden */
@@ -470,10 +469,9 @@ void CaptureInterfacesDialog::updateInterfaces()
deviceMap[ui->interfaceTree->topLevelItemCount()] = i;
// Traffic sparklines
- points = new QList<int>();
InterfaceTreeWidgetItem *ti = new InterfaceTreeWidgetItem(ui->interfaceTree);
ti->setFlags(ti->flags() | Qt::ItemIsEditable);
- ti->setData(col_traffic_, Qt::UserRole, qVariantFromValue(points));
+ ti->setData(col_traffic_, Qt::UserRole, qVariantFromValue(&ti->points));
ti->setText(col_interface_, device->display_name);
if (device->no_addresses > 0) {
diff --git a/ui/qt/interface_tree.cpp b/ui/qt/interface_tree.cpp
index 9d6554a276..797f4da477 100644
--- a/ui/qt/interface_tree.cpp
+++ b/ui/qt/interface_tree.cpp
@@ -80,23 +80,20 @@ InterfaceTree::InterfaceTree(QWidget *parent) :
InterfaceTree::~InterfaceTree() {
#ifdef HAVE_LIBPCAP
- QTreeWidgetItemIterator iter(this);
-
if (stat_cache_) {
capture_stat_stop(stat_cache_);
stat_cache_ = NULL;
}
-
- while (*iter) {
- QList<int> *points;
-
- points = (*iter)->data(IFTREE_COL_STATS, Qt::UserRole).value<QList<int> *>();
- delete(points);
- ++iter;
- }
#endif // HAVE_LIBPCAP
}
+class InterfaceTreeWidgetItem : public QTreeWidgetItem
+{
+public:
+ InterfaceTreeWidgetItem() : QTreeWidgetItem() {}
+ QList<int> points;
+};
+
/* Resets the column count to the maximum colum count
*
* This is necessary, because the treeview may have more columns than
@@ -173,8 +170,6 @@ void InterfaceTree::display()
resetColumnCount();
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
- QList<int> *points;
-
device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
/* Continue if capture device is hidden */
@@ -182,11 +177,10 @@ void InterfaceTree::display()
continue;
}
- QTreeWidgetItem *ti = new QTreeWidgetItem();
+ InterfaceTreeWidgetItem *ti = new InterfaceTreeWidgetItem();
ti->setText(IFTREE_COL_NAME, QString().fromUtf8(device.display_name));
ti->setData(IFTREE_COL_NAME, Qt::UserRole, QString(device.name));
- points = new QList<int>();
- ti->setData(IFTREE_COL_STATS, Qt::UserRole, qVariantFromValue(points));
+ ti->setData(IFTREE_COL_STATS, Qt::UserRole, qVariantFromValue(&ti->points));
#if HAVE_EXTCAP
if ( device.if_info.type == IF_EXTCAP )
{
diff --git a/ui/qt/wireshark_application.cpp b/ui/qt/wireshark_application.cpp
index 1d0701f5b9..f1d1df43f6 100644
--- a/ui/qt/wireshark_application.cpp
+++ b/ui/qt/wireshark_application.cpp
@@ -455,7 +455,7 @@ bool WiresharkApplication::event(QEvent *event)
}
void WiresharkApplication::clearRecentItems() {
- qDeleteAll(recent_items_.begin(), recent_items_.end());
+ qDeleteAll(recent_items_);
recent_items_.clear();
emit updateRecentItemStatus(NULL, 0, false);
}
@@ -473,6 +473,9 @@ void WiresharkApplication::cleanup()
// Write the user's recent file(s) to disk.
write_profile_recent();
write_recent();
+
+ qDeleteAll(recent_items_);
+ recent_items_.clear();
}
void WiresharkApplication::itemStatusFinished(const QString filename, qint64 size, bool accessible) {