Fix quit command to work gracefully

This commit is contained in:
Jeremy Ruston 2024-03-19 10:04:32 +00:00
parent 259b3dca1b
commit 1c64646393
3 changed files with 12 additions and 3 deletions

View File

@ -25,9 +25,8 @@ var Command = function(params,commander,callback) {
};
Command.prototype.execute = function() {
// The Node.js docs are very clear that exiting in this way can be dangerous because pending I/O is cancelled.
// TODO: stop the server listeners explicitly so that Node.js will exit the process naturally.
process.exit();
// We don't actually quit, we just issue the "th-quit" hook to give listeners a chance to exit
$tw.hooks.invokeHook("th-quit");
return null;
};

View File

@ -359,6 +359,11 @@ Server.prototype.listen = function(port,host,prefix) {
}
// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)
server.on("listening",function() {
// Stop listening when we get the "th-quit" hook
$tw.hooks.addHook("th-quit",function() {
server.close();
});
// Log listening details
var address = server.address(),
url = self.protocol + "://" + (address.family === "IPv6" ? "[" + address.address + "]" : address.address) + ":" + address.port + prefix;
$tw.utils.log("Serving on " + url,"brown/orange");

View File

@ -466,6 +466,11 @@ Server.prototype.listen = function(port,host,prefix,options) {
});
// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)
server.on("listening",function() {
// Stop listening when we get the "th-quit" hook
$tw.hooks.addHook("th-quit",function() {
server.close();
});
// Log listening details
var address = server.address(),
url = self.protocol + "://" + (address.family === "IPv6" ? "[" + address.address + "]" : address.address) + ":" + address.port + prefix;
$tw.utils.log("Serving on " + url,"brown/orange");