From 045fb30399e3c9d74ceb4ebe3dbddc9416c3ce28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Sat, 24 Apr 2010 23:42:44 +0200 Subject: Fix leaks in LinkLocalConnector. 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 createBrowseQuery(); boost::shared_ptr 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(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& 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 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 querier; boost::shared_ptr resolveQuery; + boost::bsignals::connection resolveQueryHostNameResolvedConnection; boost::shared_ptr connection; + boost::bsignals::connection connectionConnectFinishedConnection; std::vector > 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(); -- cgit v0.10.2-6-g49f6