net::Server.unref() failed on cluster mode
kyriosli opened this issue · 3 comments
kyriosli commented
This can be easily reproduced by the following code:
var cluster = require('cluster');
if (cluster.isMaster) {
cluster.fork();
}
else {
require('net').createServer().listen(8081, function () {
this.unref();
})
}
In node v0.12.7 it says:
net.js:1440
this._handle.unref();
^
TypeError: undefined is not a function
at Server.unref (net.js:1440:18)
at Server.<anonymous> (/home/kyrios.li/test.js:7:8)
at Server.g (events.js:199:16)
at Server.emit (events.js:129:20)
at net.js:1171:12
at process._tickCallback (node.js:355:11)
and the same code is ok when NODE_CLUSTER_SCHED_POLICY
is set to none
. So I thought maybe it is a problem with RoundRobin?
kyriosli commented
I simplified the code to to the following:
var cluster = require('cluster');
if (cluster.isMaster) {
cluster.fork();
}
but the child process is not exiting because there is internal message listeners. So Making unref
work well will not make a change.
But I think we should at least avoid the error to be thrown, maybe a patch to the net
module that ignores the unref
call when cluster.isSlave
is true will do?
bnoordhuis commented
bnoordhuis commented
Fixed by nodejs/node@fa98b97.