diff options
| author | Remko Tronçon <git@el-tramo.be> | 2010-04-24 21:42:44 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2010-04-24 21:42:44 (GMT) | 
| commit | 045fb30399e3c9d74ceb4ebe3dbddc9416c3ce28 (patch) | |
| tree | 04049c68e984b596e582cbe4fb91bbd3c1fb57dd | |
| parent | 973ca2197c0f893b3350c48678dba2055d1dee48 (diff) | |
| download | swift-045fb30399e3c9d74ceb4ebe3dbddc9416c3ce28.zip swift-045fb30399e3c9d74ceb4ebe3dbddc9416c3ce28.tar.bz2 | |
Fix leaks in LinkLocalConnector.
| -rw-r--r-- | Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h | 4 | ||||
| -rw-r--r-- | Swiften/LinkLocal/LinkLocalConnector.cpp | 13 | ||||
| -rw-r--r-- | Swiften/LinkLocal/LinkLocalConnector.h | 2 | ||||
| -rw-r--r-- | Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp | 1 | ||||
| -rw-r--r-- | Swiften/LinkLocal/UnitTest/LinkLocalServiceBrowserTest.cpp | 1 | 
5 files changed, 17 insertions, 4 deletions
| diff --git a/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h b/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h index ef7af02..f08ab68 100644 --- a/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h +++ b/Swiften/LinkLocal/DNSSD/Fake/FakeDNSSDQuerier.h @@ -34,6 +34,10 @@ namespace Swift {  			void start() {}  			void stop() {} +			void clearAllQueriesEverRun() { +				allQueriesEverRun.clear(); +			} +  			boost::shared_ptr<DNSSDBrowseQuery> createBrowseQuery();  			boost::shared_ptr<DNSSDRegisterQuery> createRegisterQuery(  					const String& name, int port, const ByteArray& info); diff --git a/Swiften/LinkLocal/LinkLocalConnector.cpp b/Swiften/LinkLocal/LinkLocalConnector.cpp index 12347c9..42366e8 100644 --- a/Swiften/LinkLocal/LinkLocalConnector.cpp +++ b/Swiften/LinkLocal/LinkLocalConnector.cpp @@ -34,7 +34,7 @@ void LinkLocalConnector::connect() {  	resolveQuery = querier->createResolveHostnameQuery(  			service.getHostname(),   			service.getID().getNetworkInterfaceID()); -	resolveQuery->onHostnameResolved.connect(boost::bind( +	resolveQueryHostNameResolvedConnection = resolveQuery->onHostnameResolved.connect(boost::bind(  			&LinkLocalConnector::handleHostnameResolved,   			boost::dynamic_pointer_cast<LinkLocalConnector>(shared_from_this()),   			_1)); @@ -44,17 +44,20 @@ void LinkLocalConnector::connect() {  void LinkLocalConnector::cancel() {  	if (resolveQuery) {  		resolveQuery->finish(); +		resolveQueryHostNameResolvedConnection.disconnect(); +		resolveQuery.reset();  	} -	resolveQuery.reset(); +	connectionConnectFinishedConnection.disconnect();  	connection->disconnect();  }  void LinkLocalConnector::handleHostnameResolved(const boost::optional<HostAddress>& address) {  	resolveQuery->finish(); +	resolveQueryHostNameResolvedConnection.disconnect();  	resolveQuery.reset();  	if (address) { -		connection->onConnectFinished.connect( -				boost::bind(boost::ref(onConnectFinished), _1)); +		connectionConnectFinishedConnection = connection->onConnectFinished.connect( +				boost::bind(&LinkLocalConnector::handleConnected, shared_from_this(), _1));  		connection->connect(HostAddressPort(*address, service.getPort()));  	}  	else { @@ -64,6 +67,8 @@ void LinkLocalConnector::handleHostnameResolved(const boost::optional<HostAddres  void LinkLocalConnector::handleConnected(bool error) {  	onConnectFinished(error); +	assert(connectionConnectFinishedConnection.connected()); +	connectionConnectFinishedConnection.disconnect();  }  void LinkLocalConnector::queueElement(boost::shared_ptr<Element> element) { diff --git a/Swiften/LinkLocal/LinkLocalConnector.h b/Swiften/LinkLocal/LinkLocalConnector.h index 2a4f168..964eebf 100644 --- a/Swiften/LinkLocal/LinkLocalConnector.h +++ b/Swiften/LinkLocal/LinkLocalConnector.h @@ -57,7 +57,9 @@ namespace Swift {  			LinkLocalService service;  			boost::shared_ptr<DNSSDQuerier> querier;  			boost::shared_ptr<DNSSDResolveHostnameQuery> resolveQuery; +			boost::bsignals::connection resolveQueryHostNameResolvedConnection;  			boost::shared_ptr<Connection> connection; +			boost::bsignals::connection connectionConnectFinishedConnection;  			std::vector<boost::shared_ptr<Element> > queuedElements;  	};  } diff --git a/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp b/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp index 4bd7852..f6fc131 100644 --- a/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp +++ b/Swiften/LinkLocal/UnitTest/LinkLocalConnectorTest.cpp @@ -36,6 +36,7 @@ class LinkLocalConnectorTest : public CppUnit::TestFixture {  		}  		void tearDown() { +			querier->clearAllQueriesEverRun();  			delete eventLoop;  		} diff --git a/Swiften/LinkLocal/UnitTest/LinkLocalServiceBrowserTest.cpp b/Swiften/LinkLocal/UnitTest/LinkLocalServiceBrowserTest.cpp index 4f53931..f4b0034 100644 --- a/Swiften/LinkLocal/UnitTest/LinkLocalServiceBrowserTest.cpp +++ b/Swiften/LinkLocal/UnitTest/LinkLocalServiceBrowserTest.cpp @@ -55,6 +55,7 @@ class LinkLocalServiceBrowserTest : public CppUnit::TestFixture {  		}  		void tearDown() { +			querier->clearAllQueriesEverRun();  			addedServices.clear();  			removedServices.clear();  			changedServices.clear(); | 
 Swift
 Swift