nodejs/node-convergence-archive

net::Server.unref() failed on cluster mode

kyriosli opened this issue · 3 comments

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?

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?