internal/child_process: call postSend on error
Call `obj.postSend` in error case of `process.send()`. The `net.Socket`'s handle should not be leaked. Note that there are two callbacks invoked on handles when they are sent to the child process over IPC pipes. These callbacks are specified by `handleConversion` object, and during send two of them are invoked: * `send` * `postSend` Now for `net.Socket` in particular, `postSend` performs clean up by closing the actual uv handle. However this clean up will not happen in one of the branches. This pull request aims to fix this. PR-URL: https://github.com/nodejs/node/pull/4752 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
58d999e8fc
commit
6712a1faa5
@ -602,12 +602,18 @@ function setupChannel(target, channel) {
|
||||
} else {
|
||||
process.nextTick(function() { req.oncomplete(); });
|
||||
}
|
||||
} else if (!swallowErrors) {
|
||||
const ex = errnoException(err, 'write');
|
||||
if (typeof callback === 'function') {
|
||||
process.nextTick(callback, ex);
|
||||
} else {
|
||||
this.emit('error', ex); // FIXME(bnoordhuis) Defer to next tick.
|
||||
} else {
|
||||
// Cleanup handle on error
|
||||
if (obj && obj.postSend)
|
||||
obj.postSend(handle);
|
||||
|
||||
if (!swallowErrors) {
|
||||
const ex = errnoException(err, 'write');
|
||||
if (typeof callback === 'function') {
|
||||
process.nextTick(callback, ex);
|
||||
} else {
|
||||
this.emit('error', ex); // FIXME(bnoordhuis) Defer to next tick.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user