diff --git a/Transports.cpp b/Transports.cpp index b4130dfd..1efbfb2f 100644 --- a/Transports.cpp +++ b/Transports.cpp @@ -264,8 +264,17 @@ namespace transport it->second.sessions.front ()->SendI2NPMessages (msgs); else { - for (auto it1: msgs) - it->second.delayedMessages.push_back (it1); + if (it->second.delayedMessages.size () < MAX_NUM_DELAYED_MESSAGES) + { + for (auto it1: msgs) + it->second.delayedMessages.push_back (it1); + } + else + { + LogPrint (eLogWarning, "Transports: delayed messages queue size exceeds ", MAX_NUM_DELAYED_MESSAGES); + std::unique_lock l(m_PeersMutex); + m_Peers.erase (it); + } } } @@ -337,7 +346,7 @@ namespace transport } LogPrint (eLogError, "Transports: No NTCP or SSU addresses available"); peer.Done (); - std::unique_lock l(m_PeersMutex); + std::unique_lock l(m_PeersMutex); m_Peers.erase (ident); return false; } @@ -369,7 +378,7 @@ namespace transport else { LogPrint (eLogError, "Transports: RouterInfo not found, Failed to send messages"); - std::unique_lock l(m_PeersMutex); + std::unique_lock l(m_PeersMutex); m_Peers.erase (it); } } @@ -413,7 +422,7 @@ namespace transport } } LogPrint (eLogError, "Transports: Unable to resolve NTCP address: ", ecode.message ()); - std::unique_lock l(m_PeersMutex); + std::unique_lock l(m_PeersMutex); m_Peers.erase (it1); } } @@ -455,7 +464,7 @@ namespace transport } } LogPrint (eLogError, "Transports: Unable to resolve SSU address: ", ecode.message ()); - std::unique_lock l(m_PeersMutex); + std::unique_lock l(m_PeersMutex); m_Peers.erase (it1); } } @@ -590,7 +599,7 @@ namespace transport ConnectToPeer (ident, it->second); else { - std::unique_lock l(m_PeersMutex); + std::unique_lock l(m_PeersMutex); m_Peers.erase (it); } } diff --git a/Transports.h b/Transports.h index 9b231802..2902e052 100644 --- a/Transports.h +++ b/Transports.h @@ -66,6 +66,7 @@ namespace transport }; const size_t SESSION_CREATION_TIMEOUT = 10; // in seconds + const int MAX_NUM_DELAYED_MESSAGES = 50; class Transports { public: