cluster: add handle ref/unref stubs in rr mode
Add ref() and unref() stub methods to the faux handle in round-robin mode. Fixes the following TypeError when calling `server.unref()` in the worker: net.js:1521 this._handle.unref(); ^ TypeError: this._handle.unref is not a function at Server.unref (net.js:1521:18) No actual reference counting is implemented. It would effectively be a no-op because the control channel would still keep the worker alive. Fixes: https://github.com/nodejs/node/issues/73 PR-URL: https://github.com/nodejs/io.js/pull/2274 Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
parent
3cbb5870e5
commit
fa98b97171
@ -603,12 +603,22 @@ function workerInit() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX(bnoordhuis) Probably no point in implementing ref() and unref()
|
||||||
|
// because the control channel is going to keep the worker alive anyway.
|
||||||
|
function ref() {
|
||||||
|
}
|
||||||
|
|
||||||
|
function unref() {
|
||||||
|
}
|
||||||
|
|
||||||
// Faux handle. Mimics a TCPWrap with just enough fidelity to get away
|
// Faux handle. Mimics a TCPWrap with just enough fidelity to get away
|
||||||
// with it. Fools net.Server into thinking that it's backed by a real
|
// with it. Fools net.Server into thinking that it's backed by a real
|
||||||
// handle.
|
// handle.
|
||||||
var handle = {
|
var handle = {
|
||||||
close: close,
|
close: close,
|
||||||
listen: listen
|
listen: listen,
|
||||||
|
ref: ref,
|
||||||
|
unref: unref,
|
||||||
};
|
};
|
||||||
if (message.sockname) {
|
if (message.sockname) {
|
||||||
handle.getsockname = getsockname; // TCP handles only.
|
handle.getsockname = getsockname; // TCP handles only.
|
||||||
|
21
test/parallel/test-cluster-rr-ref.js
Normal file
21
test/parallel/test-cluster-rr-ref.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const assert = require('assert');
|
||||||
|
const cluster = require('cluster');
|
||||||
|
const net = require('net');
|
||||||
|
|
||||||
|
if (cluster.isMaster) {
|
||||||
|
cluster.fork().on('message', function(msg) {
|
||||||
|
if (msg === 'done') this.kill();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const server = net.createServer(assert.fail);
|
||||||
|
server.listen(common.PORT, function() {
|
||||||
|
server.unref();
|
||||||
|
server.ref();
|
||||||
|
server.close(function() {
|
||||||
|
process.send('done');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user