Fix orphan extension processes bug
Issue happens after an exception occurs and existing sessions fail to finish within the timeout period.
This commit is contained in:
1 parent
d74c56f182
commit
4be709a61b
2 files changed
+29
-10
No files matched your search
+26
-9
@@ -42,19 +42,23 @@ function run(args, callback) {
|
||||
|
||||
if (!processes[scriptName]) {
|
||||
let p = childProcess.fork('lib/extension-wrapper', [scriptName]);
|
||||
processes[scriptName] = p;
|
||||
|
||||
p.on('error', function() {
|
||||
kill(processes[scriptName]);
|
||||
delete processes[scriptName];
|
||||
if (process[scriptName] === p) {
|
||||
kill(processes[scriptName]);
|
||||
delete processes[scriptName];
|
||||
}
|
||||
});
|
||||
|
||||
p.on('disconnect', function() {
|
||||
kill(processes[scriptName]);
|
||||
delete processes[scriptName];
|
||||
if (process[scriptName] === p) {
|
||||
kill(processes[scriptName]);
|
||||
delete processes[scriptName];
|
||||
}
|
||||
});
|
||||
|
||||
p.on('message', messageHandler);
|
||||
processes[scriptName] = p;
|
||||
}
|
||||
|
||||
let id = crypto.randomBytes(8).toString('hex');
|
||||
@@ -70,7 +74,7 @@ function run(args, callback) {
|
||||
};
|
||||
|
||||
|
||||
function kill(process) {
|
||||
function kill(process, callback) {
|
||||
if (process.signalCode !== null || process.exitCode !== null)
|
||||
return;
|
||||
|
||||
@@ -81,18 +85,31 @@ function kill(process) {
|
||||
let t = setInterval(function() {
|
||||
if (process.signalCode !== null || process.exitCode !== null) {
|
||||
clearInterval(t);
|
||||
if (callback)
|
||||
callback();
|
||||
}
|
||||
else if (Date.now() > timeToKill) {
|
||||
process.kill('SIGKILL');
|
||||
clearInterval(t);
|
||||
if (callback)
|
||||
callback();
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
|
||||
function killAll() {
|
||||
for (let n in processes)
|
||||
kill(processes[n]);
|
||||
function killAll(signal, callback) {
|
||||
let counter = 1;
|
||||
for (let n in processes) {
|
||||
++counter;
|
||||
kill(processes[n], function() {
|
||||
if (--counter == 0 && callback)
|
||||
callback();
|
||||
});
|
||||
delete processes[n];
|
||||
}
|
||||
if (--counter == 0 && callback)
|
||||
callback();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-1
@@ -41,7 +41,9 @@ server = null
|
||||
|
||||
exit = () ->
|
||||
setTimeout(() ->
|
||||
process.exit(1)
|
||||
extensions.killAll(() ->
|
||||
process.exit(1)
|
||||
)
|
||||
, 30000).unref()
|
||||
|
||||
cluster.worker?.disconnect()
|
||||
|
||||
Reference in new issue
Block a user