try fixing memleak

pull/35/head
Jeff Becker 6 years ago
parent d3bada5564
commit 118954818c
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -404,7 +404,7 @@ namespace llarp
HandleRelayCommit(const LR_CommitMessage* msg);
void
PutTransitHop(TransitHop* hop);
PutTransitHop(std::shared_ptr< TransitHop > hop);
IHopHandler*
GetByUpstream(const RouterID& id, const PathID_t& path);
@ -443,7 +443,8 @@ namespace llarp
void
RemovePathSet(PathSet* set);
typedef std::multimap< PathID_t, TransitHop* > TransitHopsMap_t;
typedef std::multimap< PathID_t, std::shared_ptr< TransitHop > >
TransitHopsMap_t;
typedef std::pair< util::Mutex, TransitHopsMap_t > SyncTransitMap_t;

@ -143,9 +143,10 @@ namespace llarp
bool
PathContext::HasTransitHop(const TransitHopInfo& info)
{
return MapHas(m_TransitPaths, info.txID, [info](TransitHop* hop) -> bool {
return info == hop->info;
});
return MapHas(m_TransitPaths, info.txID,
[info](const std::shared_ptr< TransitHop >& hop) -> bool {
return info == hop->info;
});
}
IHopHandler*
@ -163,20 +164,24 @@ namespace llarp
return own;
return MapGet(m_TransitPaths, id,
[remote](const TransitHop* hop) -> bool {
[remote](const std::shared_ptr< TransitHop >& hop) -> bool {
return hop->info.upstream == remote;
},
[](TransitHop* h) -> IHopHandler* { return h; });
[](const std::shared_ptr< TransitHop >& h) -> IHopHandler* {
return h.get();
});
}
IHopHandler*
PathContext::GetByDownstream(const RouterID& remote, const PathID_t& id)
{
return MapGet(m_TransitPaths, id,
[remote](const TransitHop* hop) -> bool {
[remote](const std::shared_ptr< TransitHop >& hop) -> bool {
return hop->info.downstream == remote;
},
[](TransitHop* h) -> IHopHandler* { return h; });
[](const std::shared_ptr< TransitHop >& h) -> IHopHandler* {
return h.get();
});
}
PathSet*
@ -215,14 +220,14 @@ namespace llarp
for(auto i = range.first; i != range.second; ++i)
{
if(i->second->info.upstream == us)
return i->second;
return i->second.get();
}
}
return nullptr;
}
void
PathContext::PutTransitHop(TransitHop* hop)
PathContext::PutTransitHop(std::shared_ptr< TransitHop > hop)
{
MapPut(m_TransitPaths, hop->info.txID, hop);
MapPut(m_TransitPaths, hop->info.rxID, hop);
@ -235,23 +240,16 @@ namespace llarp
auto now = llarp_time_now_ms();
auto& map = m_TransitPaths.second;
auto itr = map.begin();
std::set< TransitHop* > removePaths;
while(itr != map.end())
{
if(itr->second->Expired(now))
{
TransitHop* path = itr->second;
llarp::LogDebug("transit path expired ", path->info);
removePaths.insert(path);
itr = map.erase(itr);
}
++itr;
}
for(auto& p : removePaths)
{
map.erase(p->info.txID);
map.erase(p->info.rxID);
delete p;
else
++itr;
}
for(auto& builder : m_PathBuilders)
{
if(builder)
@ -298,7 +296,7 @@ namespace llarp
for(auto i = range.first; i != range.second; ++i)
{
if(i->second->info.upstream == us)
return i->second;
return i->second.get();
}
}
return nullptr;

@ -169,7 +169,7 @@ namespace llarp
// decrypted record
LR_CommitRecord record;
// the actual hop
Hop* hop;
std::shared_ptr< Hop > hop;
LRCMFrameDecrypt(Context* ctx, Decrypter* dec,
const LR_CommitMessage* commit)
@ -194,6 +194,8 @@ namespace llarp
self->hop->ExpireTime());
self->context->Router()->PersistSessionUntil(self->hop->info.upstream,
self->hop->ExpireTime());
// put hop
self->context->PutTransitHop(self->hop);
// forward to next hop
self->context->ForwardLRCM(self->hop->info.upstream, self->frames);
delete self;
@ -207,6 +209,8 @@ namespace llarp
// persist session to downstream until path expiration
self->context->Router()->PersistSessionUntil(self->hop->info.downstream,
self->hop->ExpireTime());
// put hop
self->context->PutTransitHop(self->hop);
// send path confirmation
llarp::routing::PathConfirmMessage confirm(self->hop->lifetime);
if(!self->hop->SendRoutingMessage(&confirm, self->context->Router()))
@ -275,8 +279,6 @@ namespace llarp
// TODO: check if we really want to accept it
self->hop->started = llarp_time_now_ms();
llarp::LogDebug("Accepted ", self->hop->info);
self->context->PutTransitHop(self->hop);
size_t sz = self->frames[0].size();
// shift

Loading…
Cancel
Save