mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
fixed addressbook crash at shutdown
This commit is contained in:
parent
629b5ff171
commit
12641ab0c0
|
@ -151,13 +151,29 @@ namespace client
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
AddressBook::AddressBook (): m_IsLoaded (false), m_IsDownloading (false),
|
AddressBook::AddressBook (): m_Storage (nullptr), m_IsLoaded (false), m_IsDownloading (false),
|
||||||
m_DefaultSubscription (nullptr), m_SubscriptionsUpdateTimer (nullptr)
|
m_DefaultSubscription (nullptr), m_SubscriptionsUpdateTimer (nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
AddressBook::~AddressBook ()
|
AddressBook::~AddressBook ()
|
||||||
{
|
{
|
||||||
|
Stop ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddressBook::Start ()
|
||||||
|
{
|
||||||
|
StartSubscriptions ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddressBook::Stop ()
|
||||||
|
{
|
||||||
|
StopSubscriptions ();
|
||||||
|
if (m_SubscriptionsUpdateTimer)
|
||||||
|
{
|
||||||
|
delete m_SubscriptionsUpdateTimer;
|
||||||
|
m_SubscriptionsUpdateTimer = nullptr;
|
||||||
|
}
|
||||||
if (m_IsDownloading)
|
if (m_IsDownloading)
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "Subscription is downloading. Waiting for temination...");
|
LogPrint (eLogInfo, "Subscription is downloading. Waiting for temination...");
|
||||||
|
@ -171,18 +187,24 @@ namespace client
|
||||||
std::this_thread::sleep_for (std::chrono::seconds (1)); // wait for 1 seconds
|
std::this_thread::sleep_for (std::chrono::seconds (1)); // wait for 1 seconds
|
||||||
}
|
}
|
||||||
LogPrint (eLogError, "Subscription download hangs");
|
LogPrint (eLogError, "Subscription download hangs");
|
||||||
|
m_IsDownloading = false;
|
||||||
}
|
}
|
||||||
if (m_Storage)
|
if (m_Storage)
|
||||||
{
|
{
|
||||||
m_Storage->Save (m_Addresses);
|
m_Storage->Save (m_Addresses);
|
||||||
delete m_Storage;
|
delete m_Storage;
|
||||||
|
m_Storage = nullptr;
|
||||||
}
|
}
|
||||||
delete m_DefaultSubscription;
|
if (m_DefaultSubscription)
|
||||||
|
{
|
||||||
|
delete m_DefaultSubscription;
|
||||||
|
m_DefaultSubscription = nullptr;
|
||||||
|
}
|
||||||
for (auto it: m_Subscriptions)
|
for (auto it: m_Subscriptions)
|
||||||
delete it;
|
delete it;
|
||||||
delete m_SubscriptionsUpdateTimer;
|
m_Subscriptions.clear ();
|
||||||
}
|
}
|
||||||
|
|
||||||
AddressBookStorage * AddressBook::CreateStorage ()
|
AddressBookStorage * AddressBook::CreateStorage ()
|
||||||
{
|
{
|
||||||
return new AddressBookFilesystemStorage ();
|
return new AddressBookFilesystemStorage ();
|
||||||
|
|
|
@ -46,14 +46,14 @@ namespace client
|
||||||
|
|
||||||
AddressBook ();
|
AddressBook ();
|
||||||
~AddressBook ();
|
~AddressBook ();
|
||||||
|
void Start ();
|
||||||
|
void Stop ();
|
||||||
bool GetIdentHash (const std::string& address, i2p::data::IdentHash& ident);
|
bool GetIdentHash (const std::string& address, i2p::data::IdentHash& ident);
|
||||||
bool GetAddress (const std::string& address, i2p::data::IdentityEx& identity);
|
bool GetAddress (const std::string& address, i2p::data::IdentityEx& identity);
|
||||||
const i2p::data::IdentHash * FindAddress (const std::string& address);
|
const i2p::data::IdentHash * FindAddress (const std::string& address);
|
||||||
void InsertAddress (const std::string& address, const std::string& base64); // for jump service
|
void InsertAddress (const std::string& address, const std::string& base64); // for jump service
|
||||||
void InsertAddress (const i2p::data::IdentityEx& address);
|
void InsertAddress (const i2p::data::IdentityEx& address);
|
||||||
|
|
||||||
void StartSubscriptions ();
|
|
||||||
void StopSubscriptions ();
|
|
||||||
void LoadHostsFromStream (std::istream& f);
|
void LoadHostsFromStream (std::istream& f);
|
||||||
void DownloadComplete (bool success);
|
void DownloadComplete (bool success);
|
||||||
//This method returns the ".b32.i2p" address
|
//This method returns the ".b32.i2p" address
|
||||||
|
@ -61,6 +61,9 @@ namespace client
|
||||||
std::string ToAddress(const i2p::data::IdentityEx& ident) { return ToAddress(ident.GetIdentHash ()); }
|
std::string ToAddress(const i2p::data::IdentityEx& ident) { return ToAddress(ident.GetIdentHash ()); }
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void StartSubscriptions ();
|
||||||
|
void StopSubscriptions ();
|
||||||
|
|
||||||
AddressBookStorage * CreateStorage ();
|
AddressBookStorage * CreateStorage ();
|
||||||
void LoadHosts ();
|
void LoadHosts ();
|
||||||
void LoadSubscriptions ();
|
void LoadSubscriptions ();
|
||||||
|
|
|
@ -101,12 +101,11 @@ namespace client
|
||||||
m_I2PControlService->Start ();
|
m_I2PControlService->Start ();
|
||||||
LogPrint("I2PControl started");
|
LogPrint("I2PControl started");
|
||||||
}
|
}
|
||||||
m_AddressBook.StartSubscriptions ();
|
m_AddressBook.Start ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientContext::Stop ()
|
void ClientContext::Stop ()
|
||||||
{
|
{
|
||||||
m_AddressBook.StopSubscriptions ();
|
|
||||||
m_HttpProxy->Stop();
|
m_HttpProxy->Stop();
|
||||||
delete m_HttpProxy;
|
delete m_HttpProxy;
|
||||||
m_HttpProxy = nullptr;
|
m_HttpProxy = nullptr;
|
||||||
|
@ -148,7 +147,7 @@ namespace client
|
||||||
m_I2PControlService = nullptr;
|
m_I2PControlService = nullptr;
|
||||||
LogPrint("I2PControl stopped");
|
LogPrint("I2PControl stopped");
|
||||||
}
|
}
|
||||||
|
m_AddressBook.Stop ();
|
||||||
for (auto it: m_Destinations)
|
for (auto it: m_Destinations)
|
||||||
it.second->Stop ();
|
it.second->Stop ();
|
||||||
m_Destinations.clear ();
|
m_Destinations.clear ();
|
||||||
|
|
Loading…
Reference in a new issue