summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-09-10 15:02:18 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-09-11 21:53:46 (GMT)
commit5fa9ecb3dff1a5918c202b72a5db313c0b7b879a (patch)
treeefd7abfd306e5e2f773bdc62c7bf1ed491c5c410 /Swiften/Client
parentbc6a510af449b6e383a11fc20c9859b8bcac247c (diff)
downloadswift-contrib-5fa9ecb3dff1a5918c202b72a5db313c0b7b879a.zip
swift-contrib-5fa9ecb3dff1a5918c202b72a5db313c0b7b879a.tar.bz2
Fixed some memory leaks.
Diffstat (limited to 'Swiften/Client')
-rw-r--r--Swiften/Client/ClientSession.cpp12
-rw-r--r--Swiften/Client/ClientSession.h4
-rw-r--r--Swiften/Client/UnitTest/ClientSessionTest.cpp8
3 files changed, 20 insertions, 4 deletions
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp
index daffbc6..17b3931 100644
--- a/Swiften/Client/ClientSession.cpp
+++ b/Swiften/Client/ClientSession.cpp
@@ -56,10 +56,10 @@ ClientSession::~ClientSession() {
}
void ClientSession::start() {
- stream->onStreamStartReceived.connect(boost::bind(&ClientSession::handleStreamStart, shared_from_this(), _1));
- stream->onElementReceived.connect(boost::bind(&ClientSession::handleElement, shared_from_this(), _1));
- stream->onError.connect(boost::bind(&ClientSession::handleStreamError, shared_from_this(), _1));
- stream->onTLSEncrypted.connect(boost::bind(&ClientSession::handleTLSEncrypted, shared_from_this()));
+ streamOnStreamStartReceivedConnection = stream->onStreamStartReceived.connect(boost::bind(&ClientSession::handleStreamStart, shared_from_this(), _1));
+ streamOnElementReceivedConnection = stream->onElementReceived.connect(boost::bind(&ClientSession::handleElement, shared_from_this(), _1));
+ streamOnErrorConnection = stream->onError.connect(boost::bind(&ClientSession::handleStreamError, shared_from_this(), _1));
+ streamOnTLSEncryptedConnection = stream->onTLSEncrypted.connect(boost::bind(&ClientSession::handleTLSEncrypted, shared_from_this()));
assert(state == Initial);
state = WaitingForStreamStart;
@@ -347,6 +347,10 @@ void ClientSession::finishSession(Error::Type error) {
void ClientSession::finishSession(boost::shared_ptr<Swift::Error> error) {
state = Finished;
stream->setWhitespacePingEnabled(false);
+ streamOnStreamStartReceivedConnection.disconnect();
+ streamOnElementReceivedConnection.disconnect();
+ streamOnErrorConnection.disconnect();
+ streamOnTLSEncryptedConnection.disconnect();
onFinished(error);
}
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index 359d7c8..cd364fe 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -123,5 +123,9 @@ namespace Swift {
ClientAuthenticator* authenticator;
boost::shared_ptr<StanzaAckRequester> stanzaAckRequester_;
boost::shared_ptr<StanzaAckResponder> stanzaAckResponder_;
+ boost::bsignals::connection streamOnStreamStartReceivedConnection;
+ boost::bsignals::connection streamOnElementReceivedConnection;
+ boost::bsignals::connection streamOnErrorConnection;
+ boost::bsignals::connection streamOnTLSEncryptedConnection;
};
}
diff --git a/Swiften/Client/UnitTest/ClientSessionTest.cpp b/Swiften/Client/UnitTest/ClientSessionTest.cpp
index 2762188..2cd9fd2 100644
--- a/Swiften/Client/UnitTest/ClientSessionTest.cpp
+++ b/Swiften/Client/UnitTest/ClientSessionTest.cpp
@@ -82,6 +82,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
server->onTLSEncrypted();
server->receiveStreamStart();
server->sendStreamStart();
+
+ session->finish();
}
void testStartTLS_ServerError() {
@@ -126,6 +128,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
server->receiveAuthRequest("PLAIN");
server->sendAuthSuccess();
server->receiveStreamStart();
+
+ session->finish();
}
void testAuthenticate_Unauthorized() {
@@ -190,6 +194,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
CPPUNIT_ASSERT(session->getStreamManagementEnabled());
// TODO: Test if the requesters & responders do their work
CPPUNIT_ASSERT_EQUAL(ClientSession::Initialized, session->getState());
+
+ session->finish();
}
void testStreamManagement_Failed() {
@@ -211,6 +217,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
CPPUNIT_ASSERT(!session->getStreamManagementEnabled());
CPPUNIT_ASSERT_EQUAL(ClientSession::Initialized, session->getState());
+
+ session->finish();
}