From b00c84574fc730eeeabb57df1f17b54855218193 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Tue, 6 Oct 2015 09:30:56 +0200 Subject: Fix memory leak warnings by Valgrind/LSAN Test-Information: Both Valgrind and clang's leak sanitizer report a lot leaks on the FileTransferTest. With this commit it the stack traces related to the fixed leaks are gone. Change-Id: Idae9a81bcd8d97576d3f1469bf64490e0bfa7d55 diff --git a/Swiften/Disco/DiscoServiceWalker.cpp b/Swiften/Disco/DiscoServiceWalker.cpp index f84262b..5803602 100644 --- a/Swiften/Disco/DiscoServiceWalker.cpp +++ b/Swiften/Disco/DiscoServiceWalker.cpp @@ -1,16 +1,16 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include +#include + #include #include -#include - namespace Swift { DiscoServiceWalker::DiscoServiceWalker(const JID& service, IQRouter* iqRouter, size_t maxSteps) : service_(service), iqRouter_(iqRouter), maxSteps_(maxSteps), active_(false) { @@ -57,6 +57,7 @@ void DiscoServiceWalker::handleDiscoInfoResponse(boost::shared_ptr in SWIFT_LOG(debug) << "Disco info response from " << request->getReceiver() << std::endl; + request->onResponse.disconnect(boost::bind(&DiscoServiceWalker::handleDiscoInfoResponse, this, _1, _2, request)); pendingDiscoInfoRequests_.erase(request); if (error) { handleDiscoError(request->getReceiver(), error); @@ -91,6 +92,7 @@ void DiscoServiceWalker::handleDiscoItemsResponse(boost::shared_ptr } SWIFT_LOG(debug) << "Received disco items from " << request->getReceiver() << std::endl; + request->onResponse.disconnect(boost::bind(&DiscoServiceWalker::handleDiscoItemsResponse, this, _1, _2, request)); pendingDiscoItemsRequests_.erase(request); if (error) { handleDiscoError(request->getReceiver(), error); diff --git a/Swiften/FileTransfer/DefaultFileTransferTransporter.cpp b/Swiften/FileTransfer/DefaultFileTransferTransporter.cpp index dffc39b..ca29898 100644 --- a/Swiften/FileTransfer/DefaultFileTransferTransporter.cpp +++ b/Swiften/FileTransfer/DefaultFileTransferTransporter.cpp @@ -73,7 +73,12 @@ DefaultFileTransferTransporter::DefaultFileTransferTransporter( DefaultFileTransferTransporter::~DefaultFileTransferTransporter() { stopGeneratingLocalCandidates(); + remoteCandidateSelector->onCandidateSelectFinished.disconnect( + boost::bind(&DefaultFileTransferTransporter::handleRemoteCandidateSelectFinished, this, _1, _2)); delete remoteCandidateSelector; + + localCandidateGenerator->onLocalTransportCandidatesGenerated.disconnect( + boost::bind(&DefaultFileTransferTransporter::handleLocalCandidatesGenerated, this, _1)); delete localCandidateGenerator; } diff --git a/Swiften/FileTransfer/SOCKS5BytestreamClientSession.cpp b/Swiften/FileTransfer/SOCKS5BytestreamClientSession.cpp index 04d5d86..a38501b 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamClientSession.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamClientSession.cpp @@ -42,6 +42,8 @@ SOCKS5BytestreamClientSession::SOCKS5BytestreamClientSession( } SOCKS5BytestreamClientSession::~SOCKS5BytestreamClientSession() { + weFailedTimeout->onTick.disconnect( + boost::bind(&SOCKS5BytestreamClientSession::handleWeFailedTimeout, this)); weFailedTimeout->stop(); } diff --git a/Swiften/FileTransfer/SOCKS5BytestreamProxiesManager.cpp b/Swiften/FileTransfer/SOCKS5BytestreamProxiesManager.cpp index 25a12ea..3221790 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamProxiesManager.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamProxiesManager.cpp @@ -113,6 +113,7 @@ boost::shared_ptr SOCKS5BytestreamProxiesManager: } void SOCKS5BytestreamProxiesManager::handleProxiesFound(std::vector proxyHosts) { + proxyFinder_->onProxiesFound.disconnect(boost::bind(&SOCKS5BytestreamProxiesManager::handleProxiesFound, this, _1)); foreach(S5BProxyRequest::ref proxy, proxyHosts) { if (proxy) { if (HostAddress(proxy->getStreamHost().get().host).isValid()) { diff --git a/Swiften/QA/FileTransferTest/FileTransferTest.cpp b/Swiften/QA/FileTransferTest/FileTransferTest.cpp index 2d2d6c8..8faf8a9 100644 --- a/Swiften/QA/FileTransferTest/FileTransferTest.cpp +++ b/Swiften/QA/FileTransferTest/FileTransferTest.cpp @@ -7,28 +7,28 @@ #include #include -#include #include +#include -#include -#include +#include +#include #include -#include +#include +#include #include -#include -#include -#include -#include +#include +#include #include #include -#include -#include +#include #include -#include #include -#include #include -#include +#include +#include +#include +#include +#include using namespace Swift; @@ -59,8 +59,8 @@ class FileTransferTest { receiver_->onConnected.connect(boost::bind(&FileTransferTest::handleReceiverConnected, this)); receiver_->onDisconnected.connect(boost::bind(&FileTransferTest::handleReceiverDisconnected, this, _1)); - new ClientXMLTracer(sender_.get()); - new ClientXMLTracer(receiver_.get()); + senderTracer_ = new ClientXMLTracer(sender_.get()); + receiverTracer_ = new ClientXMLTracer(receiver_.get()); ClientOptions options; options.useTLS = ClientOptions::NeverUseTLS; @@ -92,6 +92,9 @@ class FileTransferTest { ~FileTransferTest() { timeOut_->stop(); + delete senderTracer_; + delete receiverTracer_; + if(boost::filesystem::exists(sendFilePath_)) { boost::filesystem::remove(sendFilePath_); } @@ -239,6 +242,7 @@ class FileTransferTest { private: int senderCandidates_; boost::shared_ptr sender_; + ClientXMLTracer* senderTracer_; ByteArray sendData_; OutgoingFileTransfer::ref outgoingFileTransfer_; boost::filesystem::path sendFilePath_; @@ -247,6 +251,7 @@ class FileTransferTest { int receiverCandidates_; boost::shared_ptr receiver_; + ClientXMLTracer* receiverTracer_; ByteArray receiveData_; std::vector incomingFileTransfers_; boost::filesystem::path receiveFilePath_; -- cgit v0.10.2-6-g49f6