diff --git a/lib/extension-wrapper.js b/lib/extension-wrapper.js index be13a89..38f1113 100644 --- a/lib/extension-wrapper.js +++ b/lib/extension-wrapper.js @@ -69,3 +69,6 @@ process.on("message", function(message) { process.send([message[0], errorToFault(err), res]); }); }); + +// Ignore SIGINT +process.on('SIGINT', function() {}); diff --git a/lib/server.coffee b/lib/server.coffee index 535e157..e23cdf3 100644 --- a/lib/server.coffee +++ b/lib/server.coffee @@ -39,6 +39,30 @@ onConnection = require("./#{service}").onConnection server = null +closeServer = (timeout, callback) -> + return callback() if not server + + setTimeout(() -> + return if not callback + + # Ignore HTTP requests from connection that may still be open + server.removeListener('request', listener) + server.setTimeout(1) + + cb = callback + callback = null + setTimeout(cb, 1000) + , timeout).unref() + + server.close(() -> + return if not callback + + cb = callback + callback = null + cb() + ) + + exit = () -> setTimeout(() -> extensions.killAll(() -> @@ -48,14 +72,7 @@ exit = () -> cluster.worker?.disconnect() - if not server - db.disconnect() - cache.disconnect() - extensions.killAll() - logger.close() - return - - server.close(() -> + closeServer(20000, () -> db.disconnect() cache.disconnect() extensions.killAll()