From 524d483610baaa074c47769ef5ddfff62b26ca73 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 8 Sep 2017 11:20:23 -0700 Subject: [PATCH] Ensure non-async deactivate is run syncronously without await --- src/package-manager.js | 7 ++++++- src/package.coffee | 34 +++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/package-manager.js b/src/package-manager.js index 7718c8618..0f4484a5b 100644 --- a/src/package-manager.js +++ b/src/package-manager.js @@ -758,7 +758,12 @@ module.exports = class PackageManager { if (!suppressSerialization && this.isPackageActive(pack.name)) { this.serializePackage(pack) } - await pack.deactivate() + + const deactivationResult = pack.deactivate() + if (deactivationResult && typeof deactivationResult.then === 'function') { + await deactivationResult; + } + delete this.activePackages[pack.name] delete this.activatingPackages[pack.name] this.emitter.emit('did-deactivate-package', pack) diff --git a/src/package.coffee b/src/package.coffee index 556847bc9..fdd89bc74 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -506,18 +506,30 @@ class Package @configSchemaRegisteredOnActivate = false @deactivateResources() @deactivateKeymaps() - result = Promise.resolve() - if @mainActivated - try - result = Promise.resolve(@mainModule?.deactivate?()).then => - @mainModule?.deactivateConfig?() - @mainActivated = false - @mainInitialized = false - catch e - console.error "Error deactivating package '#{@name}'", e.stack - result = result.then => + + unless @mainActivated @emitter.emit 'did-deactivate' - result + return + + try + deactivationResult = @mainModule?.deactivate?() + catch e + console.error "Error deactivating package '#{@name}'", e.stack + + # We support then-able async promises as well as sync ones from deactivate + if deactivationResult?.then is 'function' + deactivationResult.then => @afterDeactivation() + else + @afterDeactivation() + + afterDeactivation: -> + try + @mainModule?.deactivateConfig?() + catch e + console.error "Error deactivating package '#{@name}'", e.stack + @mainActivated = false + @mainInitialized = false + @emitter.emit 'did-deactivate' deactivateResources: -> grammar.deactivate() for grammar in @grammars