use std::vector instead of thrashing heap with allocation

pull/1272/head
Jeff Becker 4 years ago
parent e9d1a61053
commit b8d262573a
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -397,6 +397,7 @@ namespace libuv
uv_check_t m_Ticker;
llarp_udp_io* const m_UDP;
llarp::SockAddr m_Addr;
std::vector<char> m_Buffer;
udp_glue(uv_loop_t* loop, llarp_udp_io* udp, const llarp::SockAddr& src)
: m_UDP(udp), m_Addr(src)
@ -408,11 +409,13 @@ namespace libuv
}
static void
Alloc(uv_handle_t*, size_t suggested_size, uv_buf_t* buf)
Alloc(uv_handle_t*h, size_t suggested_size, uv_buf_t* buf)
{
const size_t sz = std::min(suggested_size, size_t{1500});
buf->base = new char[sz];
buf->len = sz;
udp_glue * self = static_cast<udp_glue*>(h->data);
if(self->m_Buffer.empty())
self->m_Buffer.resize(suggested_size);
buf->base = self->m_Buffer.data();
buf->len = self->m_Buffer.size();
}
/// callback for libuv
@ -422,7 +425,6 @@ namespace libuv
udp_glue* glue = static_cast<udp_glue*>(handle->data);
if (addr)
glue->RecvFrom(nread, buf, llarp::SockAddr(*addr));
delete[] buf->base;
}
void

Loading…
Cancel
Save