From 0ef7b3ebf677fd8ef3a1a5f038906c2fac6befab Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Sun, 23 Nov 2014 14:23:17 -0800 Subject: [PATCH] Make the uninitialize funcs async --- src/apps.js | 6 +++++- src/cloudron.js | 6 +++++- src/database.js | 6 +++++- src/mailer.js | 6 +++++- src/server.js | 20 ++++++++++---------- src/updater.js | 6 +++++- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/apps.js b/src/apps.js index b2549b803..2045b0809 100644 --- a/src/apps.js +++ b/src/apps.js @@ -99,7 +99,9 @@ function resume(callback) { }); } -function uninitialize() { +function uninitialize(callback) { + assert(typeof callback === 'function'); + if (gAppHealthTask) { gAppHealthTask.kill(); gAppHealthTask = null; @@ -108,6 +110,8 @@ function uninitialize() { for (var appId in gTasks) { stopTask(appId); } + + callback(null); } // http://dustinsenos.com/articles/customErrorsInNode diff --git a/src/cloudron.js b/src/cloudron.js index 7267e3ed8..5c688bad0 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -80,7 +80,9 @@ function initialize(callback) { callback(null); } -function uninitialize() { +function uninitialize(callback) { + assert(typeof callback === 'function'); + clearInterval(gBackupTimerId); gBackupTimerId = null; @@ -91,6 +93,8 @@ function uninitialize() { gGetCertificateTimerId = null; gCachedIp = null; + + callback(null); } function getBackupUrl(callback) { diff --git a/src/database.js b/src/database.js index 1e6b4fc0f..4b715bb00 100644 --- a/src/database.js +++ b/src/database.js @@ -38,7 +38,9 @@ function initialize(callback) { gDatabase.run('PRAGMA busy_timeout=5000', callback); } -function uninitialize() { +function uninitialize(callback) { + assert(typeof callback === 'function'); + debug('Closing database'); gDatabase.close(); gDatabase = null; @@ -46,6 +48,8 @@ function uninitialize() { debug('Closing %d active transactions', gConnectionPool.length); gConnectionPool.forEach(function (conn) { conn.close(); }); gConnectionPool = [ ]; + + callback(null); } function clear(callback) { diff --git a/src/mailer.js b/src/mailer.js index c76dc8941..3b9abe562 100644 --- a/src/mailer.js +++ b/src/mailer.js @@ -43,13 +43,17 @@ function initialize(callback) { callback(null); } -function uninitialize() { +function uninitialize(callback) { + assert(typeof callback === 'function'); + // TODO: interrupt processQueue as well clearTimeout(gCheckDnsTimerId); gCheckDnsTimerId = null; debug(gMailQueue.length + ' mail items dropped'); gMailQueue = [ ]; + + callback(null); } function checkDns() { diff --git a/src/server.js b/src/server.js index 0a9b548e1..785f7ccb1 100644 --- a/src/server.js +++ b/src/server.js @@ -217,18 +217,18 @@ Server.prototype.stop = function (callback) { var that = this; - if (!this.httpServer) { - return callback(null); - } + if (!this.httpServer) return callback(null); - cloudron.uninitialize(); - updater.uninitialize(); - apps.uninitialize(); - mailer.uninitialize(); - database.uninitialize(); + async.series([ + cloudron.uninitialize, + updater.uninitialize, + apps.uninitialize, + mailer.uninitialize, + database.uninitialize, + this.httpServer.close.bind(this.httpServer) + ], function (error) { + if (error) console.error(error); - this.httpServer.close(function () { - that.httpServer.unref(); that.app = null; callback(null); diff --git a/src/updater.js b/src/updater.js index 9588a9016..8fbd7c732 100644 --- a/src/updater.js +++ b/src/updater.js @@ -106,9 +106,13 @@ function initialize(callback) { callback(null); }; -function uninitialize() { +function uninitialize(callback) { + assert(typeof callback === 'function'); + clearTimeout(gCheckUpdatesTimeoutId); gCheckUpdatesTimeoutId = null; + + callback(null); }; function isDev() {