diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 73b722f6759aad..b33f4e881dee67 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -144,7 +144,7 @@ Handle UDPWrap::GetFD(Local, const AccessorInfo& args) { return v8::Null(); #else HandleScope scope; - UNWRAP(UDPWrap) + UNWRAP_NO_ABORT(UDPWrap) int fd = (wrap == NULL) ? -1 : wrap->handle_.io_watcher.fd; return scope.Close(Integer::New(fd)); #endif diff --git a/test/simple/test-dgram-close.js b/test/simple/test-dgram-close.js index 90ba05a2ca13ef..77af6f13b8011e 100644 --- a/test/simple/test-dgram-close.js +++ b/test/simple/test-dgram-close.js @@ -30,5 +30,14 @@ var buf = new Buffer(1024); buf.fill(42); var socket = dgram.createSocket('udp4'); +var handle = socket._handle; socket.send(buf, 0, buf.length, common.PORT, 'localhost'); socket.close(); +socket = null; + +// Verify that accessing handle after closure doesn't throw +setImmediate(function() { + setImmediate(function() { + console.log('Handle fd is: ', handle.fd); + }); +});