Browse Source

fixed race condition

pull/134/head
orignal 10 years ago
parent
commit
41974b8c75
  1. 10
      Destination.cpp
  2. 2
      Destination.h

10
Destination.cpp

@ -85,15 +85,21 @@ namespace client
void ClientDestination::Start () void ClientDestination::Start ()
{ {
if (!m_IsRunning)
{
m_IsRunning = true;
m_Pool->SetLocalDestination (this); m_Pool->SetLocalDestination (this);
m_Pool->SetActive (true); m_Pool->SetActive (true);
m_IsRunning = true;
m_Thread = new std::thread (std::bind (&ClientDestination::Run, this)); m_Thread = new std::thread (std::bind (&ClientDestination::Run, this));
m_StreamingDestination->Start (); m_StreamingDestination->Start ();
} }
}
void ClientDestination::Stop () void ClientDestination::Stop ()
{ {
if (m_IsRunning)
{
m_IsRunning = false;
m_StreamingDestination->Stop (); m_StreamingDestination->Stop ();
if (m_DatagramDestination) if (m_DatagramDestination)
{ {
@ -106,7 +112,6 @@ namespace client
m_Pool->SetLocalDestination (nullptr); m_Pool->SetLocalDestination (nullptr);
i2p::tunnel::tunnels.StopTunnelPool (m_Pool); i2p::tunnel::tunnels.StopTunnelPool (m_Pool);
} }
m_IsRunning = false;
m_Service.stop (); m_Service.stop ();
if (m_Thread) if (m_Thread)
{ {
@ -115,6 +120,7 @@ namespace client
m_Thread = 0; m_Thread = 0;
} }
} }
}
const i2p::data::LeaseSet * ClientDestination::FindLeaseSet (const i2p::data::IdentHash& ident) const i2p::data::LeaseSet * ClientDestination::FindLeaseSet (const i2p::data::IdentHash& ident)
{ {

2
Destination.h

@ -112,7 +112,7 @@ namespace client
private: private:
bool m_IsRunning; volatile bool m_IsRunning;
std::thread * m_Thread; std::thread * m_Thread;
boost::asio::io_service m_Service; boost::asio::io_service m_Service;
boost::asio::io_service::work m_Work; boost::asio::io_service::work m_Work;

Loading…
Cancel
Save