[network/libktorrent] src/peer: API/ABI break: Remove unneeded QPointer for storing PeerManager

Jack Hill <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit bae6085261a6c1571a880ae1e053746270af6b8d by Jack Hill.
Committed on 01/08/2026 at 10:36.
Pushed by jackh into branch 'master'.

API/ABI break: Remove unneeded QPointer for storing PeerManager

The PeerConnector is owned by the PeerManager, so it is not possible for
the manager to be deleted before the connector. Hence this QPointer is
unnecessary.

Also make this a reference instead of pointer to make it clear that the
manager should out-live the connector.

No downstream changes required.

M  +10   -22   src/peer/peerconnector.cpp
M  +1    -1    src/peer/peerconnector.h
M  +1    -1    src/peer/peermanager.cpp

https://invent.kde.org/network/libktorrent/-/commit/bae6085261a6c1571a880ae1e053746270af6b8d

diff --git a/src/peer/peerconnector.cpp b/src/peer/peerconnector.cpp
index 1ea328de..c1b41258 100644
--- a/src/peer/peerconnector.cpp
+++ b/src/peer/peerconnector.cpp
@@ -21,11 +21,11 @@ static ResourceManager half_open_connections(50);
 class PeerConnector::Private
 {
 public:
-    Private(PeerConnector *p, const net::Address &addr, bool local, PeerManager *pman, std::unique_ptr<ConnectionLimit::Token> token)
+    Private(PeerConnector *p, const net::Address &addr, bool local, PeerManager &pman, std::unique_ptr<ConnectionLimit::Token> token)
         : p(p)
         , addr(addr)
         , local(local)
-        , pman(pman)
+        , m_pman(pman)
         , stopping(false)
         , do_not_start(false)
         , token(std::move(token))
@@ -50,15 +50,15 @@ public:
     Method current_method;
     net::Address addr;
     bool local;
-    QPointer<PeerManager> pman;
+    PeerManager &m_pman;
     QPointer<Authenticate> auth;
     bool stopping;
     bool do_not_start;
     std::unique_ptr<ConnectionLimit::Token> token;
 };
 
-PeerConnector::PeerConnector(const net::Address &addr, bool local, bt::PeerManager *pman, std::unique_ptr<ConnectionLimit::Token> token)
-    : Resource(&half_open_connections, pman->getTorrent().getInfoHash().toString())
+PeerConnector::PeerConnector(const net::Address &addr, bool local, bt::PeerManager &pman, std::unique_ptr<ConnectionLimit::Token> token)
+    : Resource(&half_open_connections, pman.getTorrent().getInfoHash().toString())
     , d(std::make_unique<Private>(this, addr, local, pman, std::move(token)))
 {
 }
@@ -79,8 +79,7 @@ void PeerConnector::start()
 
 void PeerConnector::acquired()
 {
-    const PeerManager *pm = d->pman.data();
-    if (!pm || !pm->isStarted()) {
+    if (!d->m_pman.isStarted()) {
         return;
     }
 
@@ -116,13 +115,8 @@ void PeerConnector::Private::authenticationFinished(Authenticate *auth, bool ok)
         return;
     }
 
-    PeerManager *pm = pman.data();
-    if (!pm) {
-        return;
-    }
-
     if (ok) {
-        pm->peerAuthenticated(auth, p, ok, std::move(token));
+        m_pman.peerAuthenticated(auth, p, ok, std::move(token));
         return;
     }
 
@@ -147,7 +141,7 @@ void PeerConnector::Private::authenticationFinished(Authenticate *auth, bool ok)
         } else if (!only_use_utp && !only_use_encryption && !tried_methods.contains(TCP_WITHOUT_ENCRYPTION) && tcp_allowed) {
             start(TCP_WITHOUT_ENCRYPTION);
         } else {
-            pm->peerAuthenticated(auth, p, false, std::move(token));
+            m_pman.peerAuthenticated(auth, p, false, std::move(token));
         }
     } else { // Primary is TCP
         if (!only_use_utp && encryption && !tried_methods.contains(TCP_WITH_ENCRYPTION) && tcp_allowed) {
@@ -159,20 +153,15 @@ void PeerConnector::Private::authenticationFinished(Authenticate *auth, bool ok)
         } else if (utp && !only_use_encryption && !tried_methods.contains(UTP_WITHOUT_ENCRYPTION)) {
             start(UTP_WITHOUT_ENCRYPTION);
         } else {
-            pm->peerAuthenticated(auth, p, false, std::move(token));
+            m_pman.peerAuthenticated(auth, p, false, std::move(token));
         }
     }
 }
 
 void PeerConnector::Private::start(PeerConnector::Method method)
 {
-    const PeerManager *pm = pman.data();
-    if (!pm) {
-        return;
-    }
-
     current_method = method;
-    const Torrent &tor = pm->getTorrent();
+    const Torrent &tor = m_pman.getTorrent();
     const TransportProtocol proto = (method == TCP_WITH_ENCRYPTION || method == TCP_WITHOUT_ENCRYPTION) ? TCP : UTP;
     if (method == TCP_WITH_ENCRYPTION || method == UTP_WITH_ENCRYPTION) {
         auth = new mse::EncryptedAuthenticate(addr, proto, tor.getInfoHash(), tor.getPeerID(), p);
@@ -186,5 +175,4 @@ void PeerConnector::Private::start(PeerConnector::Method method)
 
     AuthenticationMonitor::instance().add(auth.data());
 }
-
 }
diff --git a/src/peer/peerconnector.h b/src/peer/peerconnector.h
index e0d253b7..69bf704a 100644
--- a/src/peer/peerconnector.h
+++ b/src/peer/peerconnector.h
@@ -27,7 +27,7 @@ class PeerManager;
 class KTORRENT_EXPORT PeerConnector : public Resource
 {
 public:
-    PeerConnector(const net::Address &addr, bool local, PeerManager *pman, std::unique_ptr<ConnectionLimit::Token> token);
+    PeerConnector(const net::Address &addr, bool local, PeerManager &pman, std::unique_ptr<ConnectionLimit::Token> token);
     ~PeerConnector() override;
 
     //! Called when an authentication attempt is finished
diff --git a/src/peer/peermanager.cpp b/src/peer/peermanager.cpp
index faa0bca6..ef3bc192 100644
--- a/src/peer/peermanager.cpp
+++ b/src/peer/peermanager.cpp
@@ -733,7 +733,7 @@ void PeerManager::Private::connectToPeers()
                 break;
             }
 
-            connectors.emplace_back(std::make_unique<PeerConnector>(itr->first, itr->second, p, std::move(token)));
+            connectors.emplace_back(std::make_unique<PeerConnector>(itr->first, itr->second, *p, std::move(token)));
             connectors.back()->start();
         }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.