diff options
author | Peter Wu <peter@lekensteyn.nl> | 2015-12-11 11:41:07 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-12-16 05:43:58 +0000 |
commit | e3dd3f97f1f2afe18501adcfac9400ddc3e3c0a5 (patch) | |
tree | ef70643e6425cd26c1a6186292985966c3a16569 | |
parent | fb0246c6fd7cd34b820558f75eb48bba6326b768 (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>
-rw-r--r-- | ui/qt/capture_interfaces_dialog.cpp | 6 | ||||
-rw-r--r-- | ui/qt/interface_tree.cpp | 24 | ||||
-rw-r--r-- | ui/qt/wireshark_application.cpp | 5 |
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) { |