From 89e5b6b4cc31781f3ec666d4df303a52433b856c Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sun, 3 Nov 2019 14:38:34 -0500 Subject: [PATCH] try fixing leak --- llarp/ev/ev.hpp | 4 +++- llarp/ev/ev_libuv.cpp | 11 +++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/llarp/ev/ev.hpp b/llarp/ev/ev.hpp index 5bc4c14bd..c46449450 100644 --- a/llarp/ev/ev.hpp +++ b/llarp/ev/ev.hpp @@ -839,8 +839,10 @@ struct PacketBuffer { _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() { diff --git a/llarp/ev/ev_libuv.cpp b/llarp/ev/ev_libuv.cpp index 4c6150a96..6fbc5f9d0 100644 --- a/llarp/ev/ev_libuv.cpp +++ b/llarp/ev/ev_libuv.cpp @@ -469,7 +469,8 @@ namespace libuv udp_glue* glue = static_cast< udp_glue* >(handle->data); if(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; } @@ -487,13 +488,15 @@ namespace libuv if(sz > 0 && m_UDP) { const size_t pktsz = sz; - const llarp_buffer_t pkt{(const byte_t*)buf->base, pktsz}; if(m_UDP->recvfrom) + { + const llarp_buffer_t pkt((const byte_t*)buf->base, pktsz); m_UDP->recvfrom(m_UDP, fromaddr, ManagedBuffer{pkt}); + } else { - m_LastPackets.emplace_back( - PacketEvent{llarp::Addr(*fromaddr), PacketBuffer(buf->base, sz)}); + PacketBuffer pbuf(buf->base, pktsz); + m_LastPackets.emplace_back(PacketEvent{*fromaddr, std::move(pbuf)}); } } }