Skip to content

Commit 73a04c2

Browse files
committed
fix(exit): ensure all node processes are destroyed on exit
1 parent da86a4f commit 73a04c2

File tree

1 file changed

+56
-17
lines changed

1 file changed

+56
-17
lines changed

src/sys/node/node-sys.ts

+56-17
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,18 @@ export function createNodeSys(c: { process?: any } = {}) {
268268
rename(oldPath, newPath) {
269269
return new Promise(resolve => {
270270
fs.rename(oldPath, newPath, error => {
271-
resolve({ oldPath, newPath, error, oldDirs: [], oldFiles: [], newDirs: [], newFiles: [], renamed: [], isFile: false, isDirectory: false });
271+
resolve({
272+
oldPath,
273+
newPath,
274+
error,
275+
oldDirs: [],
276+
oldFiles: [],
277+
newDirs: [],
278+
newFiles: [],
279+
renamed: [],
280+
isFile: false,
281+
isDirectory: false,
282+
});
272283
});
273284
});
274285
},
@@ -280,11 +291,25 @@ export function createNodeSys(c: { process?: any } = {}) {
280291
const recursive = !!(opts && opts.recursive);
281292
if (recursive) {
282293
fs.rmdir(p, { recursive: true }, err => {
283-
resolve({ basename: path.basename(p), dirname: path.dirname(p), path: p, removedDirs: [], removedFiles: [], error: err });
294+
resolve({
295+
basename: path.basename(p),
296+
dirname: path.dirname(p),
297+
path: p,
298+
removedDirs: [],
299+
removedFiles: [],
300+
error: err,
301+
});
284302
});
285303
} else {
286304
fs.rmdir(p, err => {
287-
resolve({ basename: path.basename(p), dirname: path.dirname(p), path: p, removedDirs: [], removedFiles: [], error: err });
305+
resolve({
306+
basename: path.basename(p),
307+
dirname: path.dirname(p),
308+
path: p,
309+
removedDirs: [],
310+
removedFiles: [],
311+
error: err,
312+
});
288313
});
289314
}
290315
});
@@ -297,9 +322,23 @@ export function createNodeSys(c: { process?: any } = {}) {
297322
} else {
298323
fs.rmdirSync(p);
299324
}
300-
return { basename: path.basename(p), dirname: path.dirname(p), path: p, removedDirs: [], removedFiles: [], error: null };
325+
return {
326+
basename: path.basename(p),
327+
dirname: path.dirname(p),
328+
path: p,
329+
removedDirs: [],
330+
removedFiles: [],
331+
error: null,
332+
};
301333
} catch (e) {
302-
return { basename: path.basename(p), dirname: path.dirname(p), path: p, removedDirs: [], removedFiles: [], error: e };
334+
return {
335+
basename: path.basename(p),
336+
dirname: path.dirname(p),
337+
path: p,
338+
removedDirs: [],
339+
removedFiles: [],
340+
error: e,
341+
};
303342
}
304343
},
305344
removeFile(p) {
@@ -472,7 +511,8 @@ export function createNodeSys(c: { process?: any } = {}) {
472511
freemem() {
473512
return freemem();
474513
},
475-
platform: osPlatform === 'darwin' || osPlatform === 'linux' ? osPlatform : osPlatform === 'win32' ? 'windows' : '',
514+
platform:
515+
osPlatform === 'darwin' || osPlatform === 'linux' ? osPlatform : osPlatform === 'win32' ? 'windows' : '',
476516
release: release(),
477517
totalmem: totalmem(),
478518
},
@@ -491,18 +531,17 @@ export function createNodeSys(c: { process?: any } = {}) {
491531
'workbox-build': ['4.3.1', '4.3.1'],
492532
});
493533

494-
prcs.on('SIGINT', () => {
495-
while (true) {
496-
const cb = onInterruptsCallbacks.pop();
497-
if (isFunction(cb)) {
498-
try {
499-
cb();
500-
} catch (e) {}
501-
} else {
502-
break;
503-
}
534+
const runInterruptsCallbacks = () => {
535+
let cb: () => void;
536+
while (isFunction((cb = onInterruptsCallbacks.pop()))) {
537+
try {
538+
cb();
539+
} catch (e) {}
504540
}
505-
});
541+
};
542+
543+
prcs.on('SIGINT', runInterruptsCallbacks);
544+
prcs.on('exit', runInterruptsCallbacks);
506545

507546
return sys;
508547
}

0 commit comments

Comments
 (0)