diff --git a/Destination.cpp b/Destination.cpp index 9016c825..d4982ed6 100644 --- a/Destination.cpp +++ b/Destination.cpp @@ -13,7 +13,7 @@ namespace i2p namespace client { LeaseSetDestination::LeaseSetDestination (bool isPublic, const std::map * params): - m_IsRunning (false), m_Thread (nullptr), m_Work (m_Service), m_IsPublic (isPublic), + m_IsRunning (false), m_Thread (nullptr), m_IsPublic (isPublic), m_PublishReplyToken (0), m_PublishConfirmationTimer (m_Service), m_PublishVerificationTimer (m_Service), m_CleanupTimer (m_Service) { @@ -87,6 +87,8 @@ namespace client Stop (); if (m_Pool) i2p::tunnel::tunnels.DeleteTunnelPool (m_Pool); + for (auto& it: m_LeaseSetRequests) + it.second->Complete (nullptr); } void LeaseSetDestination::Run () @@ -110,12 +112,12 @@ namespace client { m_IsRunning = true; m_Pool->SetLocalDestination (shared_from_this ()); - m_Pool->SetActive (true); - m_Thread = new std::thread (std::bind (&LeaseSetDestination::Run, shared_from_this ())); - + m_Pool->SetActive (true); m_CleanupTimer.expires_from_now (boost::posix_time::minutes (DESTINATION_CLEANUP_TIMEOUT)); m_CleanupTimer.async_wait (std::bind (&LeaseSetDestination::HandleCleanupTimer, - shared_from_this (), std::placeholders::_1)); + shared_from_this (), std::placeholders::_1)); + m_Thread = new std::thread (std::bind (&LeaseSetDestination::Run, shared_from_this ())); + return true; } else @@ -129,13 +131,6 @@ namespace client m_CleanupTimer.cancel (); m_PublishConfirmationTimer.cancel (); m_PublishVerificationTimer.cancel (); - - for (auto& it: m_LeaseSetRequests) - { - it.second->Complete (nullptr); - it.second->requestTimeoutTimer.cancel (); - } - m_LeaseSetRequests.clear (); m_IsRunning = false; if (m_Pool) diff --git a/Destination.h b/Destination.h index 5b3ee655..1ccb0a9c 100644 --- a/Destination.h +++ b/Destination.h @@ -137,7 +137,6 @@ namespace client volatile bool m_IsRunning; std::thread * m_Thread; boost::asio::io_service m_Service; - boost::asio::io_service::work m_Work; mutable std::mutex m_RemoteLeaseSetsMutex; std::map > m_RemoteLeaseSets; std::map > m_LeaseSetRequests; diff --git a/Garlic.cpp b/Garlic.cpp index a11d89a0..8f1d59b6 100644 --- a/Garlic.cpp +++ b/Garlic.cpp @@ -392,10 +392,7 @@ namespace garlic GarlicDestination::~GarlicDestination () { - m_Sessions.clear (); - m_DeliveryStatusSessions.clear (); - m_Tags.clear (); - LogPrint (eLogInfo, "Garlic: destination destoryed"); + LogPrint (eLogInfo, "Garlic: destination destroyed"); } void GarlicDestination::AddSessionKey (const uint8_t * key, const uint8_t * tag)