From 979756e26af57e715efe64f8de8068243fa27e9f Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Mon, 26 Feb 2018 11:09:34 +0900 Subject: Deal with memory more carefully Plugs some memory leaks reported by Valgrind. --- connection.cpp | 2 +- events/event.cpp | 3 ++- events/event.h | 2 +- networkaccessmanager.cpp | 7 ++++--- networkaccessmanager.h | 2 +- user.cpp | 5 +++++ 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/connection.cpp b/connection.cpp index 52fcc40b..7b72c592 100644 --- a/connection.cpp +++ b/connection.cpp @@ -599,7 +599,7 @@ Room* Connection::provideRoom(const QString& id, JoinState joinState) { qCDebug(MAIN) << "Deleting Invite state for room" << prevInvite->id(); emit aboutToDeleteRoom(prevInvite); - delete prevInvite; + prevInvite->deleteLater(); } } diff --git a/events/event.cpp b/events/event.cpp index b55c44c4..74a2c3d7 100644 --- a/events/event.cpp +++ b/events/event.cpp @@ -120,7 +120,8 @@ RoomEvent::RoomEvent(Type type, const QJsonObject& rep) auto redaction = unsignedData.value("redacted_because"); if (redaction.isObject()) { - _redactedBecause.reset(new RedactionEvent(redaction.toObject())); + _redactedBecause = + std::make_unique(redaction.toObject()); return; } diff --git a/events/event.h b/events/event.h index 4bd08b55..f0ca2d15 100644 --- a/events/event.h +++ b/events/event.h @@ -100,7 +100,7 @@ namespace QMatrixClient { auto e = _impl::doMakeEvent(obj); if (!e) - e.reset(new EventT(EventType::Unknown, obj)); + e = std::make_unique(EventType::Unknown, obj); return e; } diff --git a/networkaccessmanager.cpp b/networkaccessmanager.cpp index 7fb2f602..89967a8a 100644 --- a/networkaccessmanager.cpp +++ b/networkaccessmanager.cpp @@ -19,6 +19,7 @@ #include "networkaccessmanager.h" #include +#include using namespace QMatrixClient; @@ -28,7 +29,7 @@ class NetworkAccessManager::Private QList ignoredSslErrors; }; -NetworkAccessManager::NetworkAccessManager() : d(std::make_unique()) +NetworkAccessManager::NetworkAccessManager(QObject* parent) : d(std::make_unique()) { } QList NetworkAccessManager::ignoredSslErrors() const @@ -48,7 +49,7 @@ void NetworkAccessManager::clearIgnoredSslErrors() static NetworkAccessManager* createNam() { - auto nam = new NetworkAccessManager; + auto nam = new NetworkAccessManager(QCoreApplication::instance()); // See #109. Once Qt bearer management gets better, this workaround // should become unnecessary. nam->connect(nam, &QNetworkAccessManager::networkAccessibleChanged, @@ -56,7 +57,7 @@ static NetworkAccessManager* createNam() return nam; } -NetworkAccessManager*NetworkAccessManager::instance() +NetworkAccessManager* NetworkAccessManager::instance() { static auto* nam = createNam(); return nam; diff --git a/networkaccessmanager.h b/networkaccessmanager.h index ea08c591..ae847582 100644 --- a/networkaccessmanager.h +++ b/networkaccessmanager.h @@ -28,7 +28,7 @@ namespace QMatrixClient { Q_OBJECT public: - NetworkAccessManager(); + NetworkAccessManager(QObject* parent = nullptr); ~NetworkAccessManager() override; QList ignoredSslErrors() const; diff --git a/user.cpp b/user.cpp index 9cdbb420..308b217c 100644 --- a/user.cpp +++ b/user.cpp @@ -48,6 +48,11 @@ class User::Private Private(QString userId, Connection* connection) : userId(move(userId)), connection(connection) { } + ~Private() + { + for (auto a: otherAvatars) + delete a; + } QString userId; Connection* connection; -- cgit v1.2.3