mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-03 16:14:15 +00:00
fixed race condition
This commit is contained in:
parent
2857a163e9
commit
b3d09513b8
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2024, The PurpleI2P Project
|
* Copyright (c) 2013-2025, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
@ -101,13 +101,13 @@ namespace tunnel
|
|||||||
TunnelMessageBlock block;
|
TunnelMessageBlock block;
|
||||||
block.deliveryType = eDeliveryTypeLocal;
|
block.deliveryType = eDeliveryTypeLocal;
|
||||||
block.data = msg;
|
block.data = msg;
|
||||||
std::unique_lock<std::mutex> l(m_SendMutex);
|
std::lock_guard<std::mutex> l(m_SendMutex);
|
||||||
m_Gateway.PutTunnelDataMsg (block);
|
m_Gateway.PutTunnelDataMsg (block);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitTunnelGateway::FlushTunnelDataMsgs ()
|
void TransitTunnelGateway::FlushTunnelDataMsgs ()
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_SendMutex);
|
std::lock_guard<std::mutex> l(m_SendMutex);
|
||||||
m_Gateway.SendBuffer ();
|
m_Gateway.SendBuffer ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,14 +130,22 @@ namespace tunnel
|
|||||||
EncryptTunnelMsg (tunnelMsg, newMsg);
|
EncryptTunnelMsg (tunnelMsg, newMsg);
|
||||||
|
|
||||||
LogPrint (eLogDebug, "TransitTunnel: handle msg for endpoint ", GetTunnelID ());
|
LogPrint (eLogDebug, "TransitTunnel: handle msg for endpoint ", GetTunnelID ());
|
||||||
|
std::lock_guard<std::mutex> l(m_HandleMutex);
|
||||||
m_Endpoint.HandleDecryptedTunnelDataMsg (newMsg);
|
m_Endpoint.HandleDecryptedTunnelDataMsg (newMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitTunnelEndpoint::FlushTunnelDataMsgs ()
|
void TransitTunnelEndpoint::FlushTunnelDataMsgs ()
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::mutex> l(m_HandleMutex);
|
||||||
m_Endpoint.FlushI2NPMsgs ();
|
m_Endpoint.FlushI2NPMsgs ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TransitTunnelEndpoint::Cleanup ()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> l(m_HandleMutex);
|
||||||
|
m_Endpoint.Cleanup ();
|
||||||
|
}
|
||||||
|
|
||||||
std::string TransitTunnelEndpoint::GetNextPeerName () const
|
std::string TransitTunnelEndpoint::GetNextPeerName () const
|
||||||
{
|
{
|
||||||
auto hash = m_Endpoint.GetCurrentHash ();
|
auto hash = m_Endpoint.GetCurrentHash ();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2024, The PurpleI2P Project
|
* Copyright (c) 2013-2025, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
@ -100,7 +100,7 @@ namespace tunnel
|
|||||||
TransitTunnel (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey),
|
TransitTunnel (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey),
|
||||||
m_Endpoint (false) {}; // transit endpoint is always outbound
|
m_Endpoint (false) {}; // transit endpoint is always outbound
|
||||||
|
|
||||||
void Cleanup () override { m_Endpoint.Cleanup (); }
|
void Cleanup () override;
|
||||||
|
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage>&& tunnelMsg) override;
|
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage>&& tunnelMsg) override;
|
||||||
void FlushTunnelDataMsgs () override;
|
void FlushTunnelDataMsgs () override;
|
||||||
@ -109,6 +109,7 @@ namespace tunnel
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
std::mutex m_HandleMutex;
|
||||||
TunnelEndpoint m_Endpoint;
|
TunnelEndpoint m_Endpoint;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user