[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r3482: Fix a pile of memory leaks in the hidden service settings pa (vidalia/trunk/src/vidalia/config)
Author: edmanm
Date: 2009-01-30 22:10:32 -0500 (Fri, 30 Jan 2009)
New Revision: 3482
Modified:
vidalia/trunk/src/vidalia/config/servicepage.cpp
vidalia/trunk/src/vidalia/config/servicepage.h
Log:
Fix a pile of memory leaks in the hidden service settings page.
Modified: vidalia/trunk/src/vidalia/config/servicepage.cpp
===================================================================
--- vidalia/trunk/src/vidalia/config/servicepage.cpp 2009-01-30 05:28:21 UTC (rev 3481)
+++ vidalia/trunk/src/vidalia/config/servicepage.cpp 2009-01-31 03:10:32 UTC (rev 3482)
@@ -28,13 +28,6 @@
{
/* Invoke the Qt Designer generated object setup routine */
ui.setupUi(this);
- /* Keep a pointer to the TorControl object used to talk to Tor */
- _torControl = Vidalia::torControl();
- /* Create Tor settings objects */
- _torSettings = new TorSettings;
- /* Keep a pointer to the ServiceSettings object used to store
- * the configuration */
- _serviceSettings = new ServiceSettings(_torControl);
/* A QMap, mapping from the row number to the Entity for
* all services */
_services = new QMap<int, Service>();
@@ -66,7 +59,8 @@
/** Destructor */
ServicePage::~ServicePage()
{
- delete _serviceSettings;
+ delete _services;
+ delete _torServices;
}
/** Called when the user changes the UI translation. */
@@ -80,9 +74,11 @@
bool
ServicePage::save(QString &errmsg)
{
+ ServiceSettings serviceSettings(Vidalia::torControl());
QList<Service> serviceList;
QList<Service> publishedServices;
int index = 0;
+
while(index < ui.serviceWidget->rowCount()) {
QString address = ui.serviceWidget->item(index,0)->text();
QString virtualPort = ui.serviceWidget->item(index,1)->text();
@@ -109,13 +105,13 @@
_services = new QMap<int, Service>();
sList.setServices(_services->values());
}
- _serviceSettings->setServices(sList);
+ serviceSettings.setServices(sList);
if(publishedServices.size() > 0) {
startServicesInTor(publishedServices);
} else {
QString errmsg1 = tr("Error while trying to unpublish all services");
QString &errmsg = errmsg1;
- _serviceSettings->unpublishAllServices(&errmsg);
+ serviceSettings.unpublishAllServices(&errmsg);
}
return true;
} else {
@@ -144,6 +140,7 @@
void
ServicePage::startServicesInTor(QList<Service> services)
{
+ ServiceSettings serviceSettings(Vidalia::torControl());
QString serviceConfString;
QString errmsg = "Error while trying to publish services.";
QListIterator<Service> it(services);
@@ -158,26 +155,28 @@
temp.physicalAddressPort())));
serviceConfString.append(" " + temp.additionalServiceOptions());
}
- _serviceSettings->applyServices(serviceConfString, &errmsg);
+ serviceSettings.applyServices(serviceConfString, &errmsg);
}
/** Loads previously saved settings */
void
ServicePage::load()
{
+ ServiceSettings serviceSettings(Vidalia::torControl());
+ QList<Service> torServiceList;
+
ui.removeButton->setEnabled(false);
ui.copyButton->setEnabled(false);
ui.browseButton->setEnabled(false);
// get all services
- _services = new QMap<int, Service>();
- _torServices = new QMap<QString, Service>();
- QList<Service> torServiceList;
+ _services->clear();
+ _torServices->clear();
- QString torConfigurationString = _serviceSettings->getHiddenServiceDirectories();
+ QString torConfigurationString = serviceSettings.getHiddenServiceDirectories();
torServiceList = extractSingleServices(torConfigurationString);
QList<Service> completeList = torServiceList;
// the services stored with vidalia
- ServiceList serviceList = _serviceSettings->getServices();
+ ServiceList serviceList = serviceSettings.getServices();
QList<Service> serviceSettingsList = serviceList.services();
QListIterator<Service> it(serviceSettingsList);
// check whether a service is already in the list because he is published
@@ -313,7 +312,7 @@
/** this method creates/displays the values for each service
* shown in the service listing */
void
-ServicePage::initServiceTable(QMap<int, Service>* _services)
+ServicePage::initServiceTable(QMap<int, Service>* services)
{
// clean the widget
int rows = ui.serviceWidget->rowCount();
@@ -322,8 +321,8 @@
}
//for each service
int index = 0;
- while(index < _services->size()) {
- Service tempService = _services->value(index);
+ while(index < services->size()) {
+ Service tempService = services->value(index);
ui.serviceWidget->insertRow(index);
QTableWidgetItem *cboxitem = new QTableWidgetItem();
cboxitem->setFlags(Qt::ItemIsSelectable);
Modified: vidalia/trunk/src/vidalia/config/servicepage.h
===================================================================
--- vidalia/trunk/src/vidalia/config/servicepage.h 2009-01-30 05:28:21 UTC (rev 3481)
+++ vidalia/trunk/src/vidalia/config/servicepage.h 2009-01-31 03:10:32 UTC (rev 3482)
@@ -65,16 +65,11 @@
void valueChanged();
private:
- /** A TorControl object used to talk to Tor. */
- TorControl* _torControl;
- /** A TorSettings object used for saving/loading the Tor settings */
- TorSettings *_torSettings;
- /** A ServiceSettings object used to load/save the services. */
- ServiceSettings* _serviceSettings;
/** A QMap, mapping from the row number in the table to the service Entity */
QMap<int, Service>* _services;
/** A QList, consisting of all running services before vidalia starts */
QMap<QString, Service>* _torServices;
+
/** Qt Designer generated object */
Ui::ServicePage ui;
};