Browse Source

fixed race condition

pull/102/head
orignal 10 years ago
parent
commit
f528eeae10
  1. 3
      Tunnel.cpp
  2. 1
      Tunnel.h

3
Tunnel.cpp

@ -290,6 +290,7 @@ namespace tunnel @@ -290,6 +290,7 @@ namespace tunnel
TunnelPool * Tunnels::CreateTunnelPool (i2p::data::LocalDestination& localDestination, int numHops)
{
auto pool = new TunnelPool (localDestination, numHops);
std::unique_lock<std::mutex> l(m_PoolsMutex);
m_Pools[pool->GetIdentHash ()] = pool;
return pool;
}
@ -298,6 +299,7 @@ namespace tunnel @@ -298,6 +299,7 @@ namespace tunnel
{
if (pool)
{
std::unique_lock<std::mutex> l(m_PoolsMutex);
m_Pools.erase (pool->GetIdentHash ());
delete pool;
}
@ -524,6 +526,7 @@ namespace tunnel @@ -524,6 +526,7 @@ namespace tunnel
void Tunnels::ManageTunnelPools ()
{
std::unique_lock<std::mutex> l(m_PoolsMutex);
for (auto& it: m_Pools)
{
it.second->CreateTunnels ();

1
Tunnel.h

@ -154,6 +154,7 @@ namespace tunnel @@ -154,6 +154,7 @@ namespace tunnel
std::list<OutboundTunnel *> m_OutboundTunnels;
std::mutex m_TransitTunnelsMutex;
std::map<uint32_t, TransitTunnel *> m_TransitTunnels;
std::mutex m_PoolsMutex;
std::map<i2p::data::IdentHash, TunnelPool *> m_Pools;
TunnelPool * m_ExploratoryPool;
i2p::util::Queue<I2NPMessage> m_Queue;

Loading…
Cancel
Save