try fixing leak

pull/898/head
Jeff Becker 5 years ago
parent 67da33a221
commit 89e5b6b4cc
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -839,8 +839,10 @@ struct PacketBuffer
{ {
_ptr = new char[sz]; _ptr = new char[sz];
} }
PacketBuffer(char* buf, size_t sz) : _ptr{buf}, _sz{sz} PacketBuffer(char* buf, size_t sz)
{ {
_ptr = buf;
_sz = sz;
} }
~PacketBuffer() ~PacketBuffer()
{ {

@ -469,7 +469,8 @@ namespace libuv
udp_glue* glue = static_cast< udp_glue* >(handle->data); udp_glue* glue = static_cast< udp_glue* >(handle->data);
if(addr) if(addr)
glue->RecvFrom(nread, buf, addr); glue->RecvFrom(nread, buf, addr);
if(glue->m_UDP == nullptr || glue->m_UDP->recvfrom != nullptr) if(nread == 0 || glue->m_UDP == nullptr
|| glue->m_UDP->recvfrom != nullptr)
delete[] buf->base; delete[] buf->base;
} }
@ -487,13 +488,15 @@ namespace libuv
if(sz > 0 && m_UDP) if(sz > 0 && m_UDP)
{ {
const size_t pktsz = sz; const size_t pktsz = sz;
const llarp_buffer_t pkt{(const byte_t*)buf->base, pktsz};
if(m_UDP->recvfrom) if(m_UDP->recvfrom)
{
const llarp_buffer_t pkt((const byte_t*)buf->base, pktsz);
m_UDP->recvfrom(m_UDP, fromaddr, ManagedBuffer{pkt}); m_UDP->recvfrom(m_UDP, fromaddr, ManagedBuffer{pkt});
}
else else
{ {
m_LastPackets.emplace_back( PacketBuffer pbuf(buf->base, pktsz);
PacketEvent{llarp::Addr(*fromaddr), PacketBuffer(buf->base, sz)}); m_LastPackets.emplace_back(PacketEvent{*fromaddr, std::move(pbuf)});
} }
} }
} }

Loading…
Cancel
Save