";
@@ -1038,9 +1035,8 @@
}
- auto samSessions = sam->GetSessionsList ();
- if (samSessions.size ())
+ if (sam->GetSessions ().size ())
{
s << "" << tr("SAM sessions") << ":
\r\n\r\n";
- for (auto& it: samSessions)
+ for (auto& it: sam->GetSessions ())
{
auto& name = it.second->GetLocalDestination ()->GetNickname ();
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/I2PControlHandlers.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/I2PControlHandlers.cpp
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/I2PControlHandlers.cpp 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/I2PControlHandlers.cpp 2026-08-24 17:04:06.000000000 +0000
@@ -236,5 +236,5 @@
void I2PControlHandlers::TunnelsParticipatingHandler (std::ostringstream& results)
{
- int transit = i2p::tunnel::tunnels.CountTransitTunnels ();
+ int transit = i2p::tunnel::tunnels.GetTransitTunnels ().size ();
InsertParam (results, "i2p.router.net.tunnels.participating", transit);
}
@@ -469,5 +469,5 @@
pt.put("enabled", true);
boost::property_tree::ptree sam_sessions;
- for (auto& it: sam->GetSessionsList ())
+ for (auto& it: sam->GetSessions ())
{
boost::property_tree::ptree sam_session, sam_session_sockets;
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Destination.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Destination.cpp
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Destination.cpp 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Destination.cpp 2026-08-24 17:04:06.000000000 +0000
@@ -672,5 +672,5 @@
if (!outbound || !inbound)
{
- if (m_Pool->HasInboundTunnels () && m_Pool->HasOutboundTunnels ())
+ if (!m_Pool->GetInboundTunnels ().empty () && !m_Pool->GetOutboundTunnels ().empty ())
{
LogPrint (eLogInfo, "Destination: No compatible tunnels with ", floodfill->GetIdentHash ().ToBase64 (), ". Trying another floodfill");
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Destination.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Destination.h
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Destination.h 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Destination.h 2026-08-24 17:04:06.000000000 +0000
@@ -20,5 +20,4 @@
#include
#include
-#include
#include
#include "Identity.h"
@@ -143,5 +142,5 @@
~LeaseSetDestination ();
const std::string& GetNickname () const { return m_Nickname; };
- auto& GetService () const { return m_Service; };
+ auto& GetService () { return m_Service; };
virtual void Start ();
@@ -152,5 +151,5 @@
std::shared_ptr GetTunnelPool () { return m_Pool; };
- bool IsReady () const { return m_LeaseSet && !m_LeaseSet->IsExpired () && m_Pool->HasOutboundTunnels (); };
+ bool IsReady () const { return m_LeaseSet && !m_LeaseSet->IsExpired () && m_Pool->GetOutboundTunnels ().size () > 0; };
std::shared_ptr FindLeaseSet (const i2p::data::IdentHash& ident);
bool RequestDestination (const i2p::data::IdentHash& dest, RequestComplete requestComplete = nullptr);
@@ -236,5 +235,6 @@
// for HTTP only
- int GetNumRemoteLeaseSets () const { std::lock_guard lock(m_RemoteLeaseSetsMutex); return m_RemoteLeaseSets.size (); };
+ int GetNumRemoteLeaseSets () const { return m_RemoteLeaseSets.size (); };
+ const decltype(m_RemoteLeaseSets)& GetLeaseSets () const { return m_RemoteLeaseSets; };
// copy for other threads, unlike GetLeaseSets which hands out the container itself
std::vector > GetLeaseSetsList () const
@@ -249,9 +249,4 @@
bool IsEncryptedLeaseSet () const { return m_LeaseSetType == i2p::data::NETDB_STORE_TYPE_ENCRYPTED_LEASESET2; };
bool IsPerClientAuth () const { return m_AuthType > 0; };
- std::future > GetECIESx25519SessionsList () const
- {
- return boost::asio::post (GetService (),
- boost::asio::use_future ([this]() { return GetECIESx25519SessionsListSync (); }));
- }
};
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Garlic.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Garlic.h
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Garlic.h 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Garlic.h 2026-08-24 17:04:06.000000000 +0000
@@ -13,6 +13,4 @@
#include
#include
-#include
-#include
#include
#include
@@ -322,5 +320,5 @@
// outgoing sessions
int m_NumTags;
- mutable std::mutex m_SessionsMutex;
+ std::mutex m_SessionsMutex;
std::unordered_map m_Sessions;
std::unordered_map, ECIESX25519AEADRatchetSessionPtr> m_ECIESx25519Sessions; // static key -> session
@@ -344,21 +342,6 @@
size_t GetNumIncomingTags () const { return m_Tags.size (); }
size_t GetNumIncomingECIESx25519Tags () const { return m_ECIESx25519Tags.size (); }
- // thread-safe snapshots, safe to iterate without holding any lock
- std::vector > GetSessionsList () const
- {
- std::unique_lock l(m_SessionsMutex);
- return std::vector > (m_Sessions.begin (), m_Sessions.end ());
- }
-
- protected:
-
- std::vector GetECIESx25519SessionsListSync () const
- {
- std::vector sessions;
- sessions.reserve (m_ECIESx25519Sessions.size ());
- for (const auto& it: m_ECIESx25519Sessions)
- sessions.push_back (it.second);
- return sessions;
- }
+ const decltype(m_Sessions)& GetSessions () const { return m_Sessions; };
+ const decltype(m_ECIESx25519Sessions)& GetECIESx25519Sessions () const { return m_ECIESx25519Sessions; }
};
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/TransitTunnel.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/TransitTunnel.cpp
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/TransitTunnel.cpp 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/TransitTunnel.cpp 2026-08-24 17:04:06.000000000 +0000
@@ -223,5 +223,4 @@
m_Thread = nullptr;
}
- std::lock_guard l(m_TransitTunnelsMutex);
m_TransitTunnels.clear ();
}
@@ -638,8 +637,5 @@
{
if (tunnels.AddTunnel (tunnel))
- {
- std::lock_guard l(m_TransitTunnelsMutex);
m_TransitTunnels.push_back (tunnel);
- }
else
{
@@ -652,5 +648,4 @@
void TransitTunnels::ManageTransitTunnels (uint64_t ts)
{
- std::lock_guard l(m_TransitTunnelsMutex);
for (auto it = m_TransitTunnels.begin (); it != m_TransitTunnels.end ();)
{
@@ -676,5 +671,5 @@
int timeout = 0;
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
- std::lock_guard l(m_TransitTunnelsMutex);
+ // TODO: possible race condition with I2PControl
for (const auto& it : m_TransitTunnels)
{
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/TransitTunnel.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/TransitTunnel.h
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/TransitTunnel.h 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/TransitTunnel.h 2026-08-24 17:04:06.000000000 +0000
@@ -12,5 +12,4 @@
#include
#include
-#include
#include
#include
@@ -139,5 +138,5 @@
void PostTransitTunnelBuildMsg (std::shared_ptr&& msg);
- size_t GetNumTransitTunnels () const { std::lock_guard l(m_TransitTunnelsMutex); return m_TransitTunnels.size (); }
+ size_t GetNumTransitTunnels () const { return m_TransitTunnels.size (); }
int GetTransitTunnelsExpirationTimeout ();
@@ -157,5 +156,4 @@
volatile bool m_IsRunning;
std::unique_ptr m_Thread;
- mutable std::mutex m_TransitTunnelsMutex;
std::list > m_TransitTunnels;
i2p::util::Queue > m_TunnelBuildMsgQueue;
@@ -164,10 +162,6 @@
public:
- // for HTTP and I2PControl; thread-safe snapshot, safe to iterate without holding any lock
- std::vector > GetTransitTunnelsList () const
- {
- std::lock_guard l(m_TransitTunnelsMutex);
- return std::vector > (m_TransitTunnels.begin (), m_TransitTunnels.end ());
- }
+ // for HTTP only
+ const auto& GetTransitTunnels () const { return m_TransitTunnels; };
size_t GetTunnelBuildMsgQueueSize () const { return m_TunnelBuildMsgQueue.GetSize (); };
};
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Tunnel.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Tunnel.cpp
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Tunnel.cpp 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Tunnel.cpp 2026-08-24 17:04:06.000000000 +0000
@@ -889,8 +889,5 @@
pool->TunnelExpired (tunnel);
// we don't have outbound tunnels in m_Tunnels
- {
- std::lock_guard l(m_TunnelsMutex);
- it = m_OutboundTunnels.erase (it);
- }
+ it = m_OutboundTunnels.erase (it);
}
else
@@ -943,8 +940,5 @@
pool->TunnelExpired (tunnel);
RemoveTunnel (tunnel->GetTunnelID ());
- {
- std::lock_guard l(m_TunnelsMutex);
- it = m_InboundTunnels.erase (it);
- }
+ it = m_InboundTunnels.erase (it);
}
else
@@ -1068,8 +1062,5 @@
{
// we don't need to insert it to m_Tunnels
- {
- std::lock_guard l(m_TunnelsMutex);
- m_OutboundTunnels.push_back (newTunnel);
- }
+ m_OutboundTunnels.push_back (newTunnel);
auto pool = newTunnel->GetTunnelPool ();
if (pool && pool->IsActive ())
@@ -1083,8 +1074,5 @@
if (AddTunnel (newTunnel))
{
- {
- std::lock_guard l(m_TunnelsMutex);
- m_InboundTunnels.push_back (newTunnel);
- }
+ m_InboundTunnels.push_back (newTunnel);
auto pool = newTunnel->GetTunnelPool ();
if (!pool)
@@ -1113,8 +1101,5 @@
inboundTunnel->SetTunnelPool (pool);
inboundTunnel->SetState (eTunnelStateEstablished);
- {
- std::lock_guard l(m_TunnelsMutex);
- m_InboundTunnels.push_back (inboundTunnel);
- }
+ m_InboundTunnels.push_back (inboundTunnel);
AddTunnel (inboundTunnel);
return inboundTunnel;
@@ -1126,8 +1111,5 @@
outboundTunnel->SetTunnelPool (pool);
outboundTunnel->SetState (eTunnelStateEstablished);
- {
- std::lock_guard l(m_TunnelsMutex);
- m_OutboundTunnels.push_back (outboundTunnel);
- }
+ m_OutboundTunnels.push_back (outboundTunnel);
// we don't insert into m_Tunnels
return outboundTunnel;
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Tunnel.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Tunnel.h
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Tunnel.h 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Tunnel.h 2026-08-24 17:04:06.000000000 +0000
@@ -328,16 +328,8 @@
public:
- // for HTTP only; thread-safe snapshots, safe to iterate without holding any lock
- std::vector > GetOutboundTunnelsList () const
- {
- std::lock_guard l(m_TunnelsMutex);
- return std::vector > (m_OutboundTunnels.begin (), m_OutboundTunnels.end ());
- }
- std::vector > GetInboundTunnelsList () const
- {
- std::lock_guard l(m_TunnelsMutex);
- return std::vector > (m_InboundTunnels.begin (), m_InboundTunnels.end ());
- }
- auto GetTransitTunnelsList () const { return m_TransitTunnels.GetTransitTunnelsList (); };
+ // for HTTP only
+ const decltype(m_OutboundTunnels)& GetOutboundTunnels () const { return m_OutboundTunnels; };
+ const decltype(m_InboundTunnels)& GetInboundTunnels () const { return m_InboundTunnels; };
+ const auto& GetTransitTunnels () const { return m_TransitTunnels.GetTransitTunnels (); };
size_t CountTransitTunnels() const;
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/TunnelPool.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/TunnelPool.h
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/TunnelPool.h 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/TunnelPool.h 2026-08-24 17:04:06.000000000 +0000
@@ -162,26 +162,7 @@
public:
- bool HasOutboundTunnels () const
- {
- std::unique_lock l(m_OutboundTunnelsMutex);
- return !m_OutboundTunnels.empty ();
- }
- bool HasInboundTunnels () const
- {
- std::unique_lock l(m_InboundTunnelsMutex);
- return !m_InboundTunnels.empty ();
- }
-
- // for HTTP only; thread-safe snapshots, safe to iterate without holding any lock
- std::vector > GetOutboundTunnelsList () const
- {
- std::unique_lock l(m_OutboundTunnelsMutex);
- return std::vector > (m_OutboundTunnels.begin (), m_OutboundTunnels.end ());
- }
- std::vector > GetInboundTunnelsList () const
- {
- std::unique_lock l(m_InboundTunnelsMutex);
- return std::vector > (m_InboundTunnels.begin (), m_InboundTunnels.end ());
- }
+ // for HTTP only
+ const decltype(m_OutboundTunnels)& GetOutboundTunnels () const { return m_OutboundTunnels; };
+ const decltype(m_InboundTunnels)& GetInboundTunnels () const { return m_InboundTunnels; };
};
diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/ClientContext.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/ClientContext.h
--- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/ClientContext.h 2026-08-24 17:07:51.000000000 +0000
+++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/ClientContext.h 2026-08-24 17:04:06.000000000 +0000
@@ -12,6 +12,4 @@
#include