summaryrefslogtreecommitdiff
path: root/src/udp_wrap.cc
diff options
context:
space:
mode:
authorPaul Kiddie <paul@paulkiddie.com>2016-09-17 10:45:00 +0100
committerAnna Henningsen <anna@addaleax.net>2016-09-20 18:59:10 +0200
commitfffb9a386a6abc86664307a4d21a7f70518f0331 (patch)
tree3682ebf97621b57e21d1f0194a572ed5d9b13b0e /src/udp_wrap.cc
parentc1e47ed8c883afba3c240e89d763a28a57ec1373 (diff)
downloadandroid-node-v8-fffb9a386a6abc86664307a4d21a7f70518f0331.tar.gz
android-node-v8-fffb9a386a6abc86664307a4d21a7f70518f0331.tar.bz2
android-node-v8-fffb9a386a6abc86664307a4d21a7f70518f0331.zip
src: use MaybeStackBuffer on DoSend/Writev
instead of creating own buffer, use MaybeStackBuffer on DoSend to take advantage of its destructor to free up memory, so buffer never leaks memory - even if code in DoSend throws. Use MaybeStackBuffer in Writev to take advantage of destructor on MaybeStackBuffer to clear itself up, rather than Writev managing resources itself. PR-URL: https://github.com/nodejs/node/pull/8626 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'src/udp_wrap.cc')
-rw-r--r--src/udp_wrap.cc14
1 files changed, 2 insertions, 12 deletions
diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc
index f191b3a755..7fba279fca 100644
--- a/src/udp_wrap.cc
+++ b/src/udp_wrap.cc
@@ -275,13 +275,7 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) {
SendWrap* req_wrap = new SendWrap(env, req_wrap_obj, have_callback);
size_t msg_size = 0;
- // allocate uv_buf_t of the correct size
- // if bigger than 16 elements
- uv_buf_t bufs_[16];
- uv_buf_t* bufs = bufs_;
-
- if (arraysize(bufs_) < count)
- bufs = new uv_buf_t[count];
+ MaybeStackBuffer<uv_buf_t, 16> bufs(count);
// construct uv_buf_t array
for (size_t i = 0; i < count; i++) {
@@ -313,16 +307,12 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) {
if (err == 0) {
err = uv_udp_send(&req_wrap->req_,
&wrap->handle_,
- bufs,
+ *bufs,
count,
reinterpret_cast<const sockaddr*>(&addr),
OnSend);
}
- // Deallocate space
- if (bufs != bufs_)
- delete[] bufs;
-
req_wrap->Dispatched();
if (err)
delete req_wrap;