net: ensure Write/ShutdownWrap references handle

`StreamBase::AfterWrite` is passing handle as an argument to the
`afterWrite` function in net.js. Thus GC should not collect the handle
and the request separately and assume that they are tied together.

With this commit - request will always outlive the StreamBase instance,
helping us survive the GC pass.

Same applies to the ShutdownWrap instances, they should never be
collected after the StreamBase instance.

Fix: https://github.com/iojs/io.js/pull/1580
PR-URL: https://github.com/iojs/io.js/pull/1590
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
Fedor Indutny 2015-05-02 17:32:29 +02:00
parent 2a3a1909ab
commit b4f5898395

View File

@ -201,6 +201,7 @@ function onSocketFinish() {
var req = new ShutdownWrap(); var req = new ShutdownWrap();
req.oncomplete = afterShutdown; req.oncomplete = afterShutdown;
req.handle = this._handle;
var err = this._handle.shutdown(req); var err = this._handle.shutdown(req);
if (err) if (err)
@ -627,6 +628,7 @@ Socket.prototype._writeGeneric = function(writev, data, encoding, cb) {
} }
var req = new WriteWrap(); var req = new WriteWrap();
req.handle = this._handle;
req.oncomplete = afterWrite; req.oncomplete = afterWrite;
req.async = false; req.async = false;
var err; var err;