diff --git a/core/src/node/module.ts b/core/src/node/module.ts index 2201fb400..0919667df 100644 --- a/core/src/node/module.ts +++ b/core/src/node/module.ts @@ -3,6 +3,7 @@ */ export class ModuleManager { public requiredModules: Record = {} + public cleaningResource = false public static instance: ModuleManager = new ModuleManager() diff --git a/electron/main.ts b/electron/main.ts index 6eaa0acfe..4ddf4df56 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -19,6 +19,7 @@ import { handleAppIPCs } from './handlers/app' import { handleAppUpdates } from './handlers/update' import { handleFsIPCs } from './handlers/fs' import { migrateExtensions } from './utils/migration' +import { dispose } from './utils/disposable' app .whenReady() @@ -37,14 +38,12 @@ app }) }) -app.on('window-all-closed', () => { - ModuleManager.instance.clearImportedModules() - app.quit() +app.once('window-all-closed', () => { + cleanUpAndQuit() }) -app.on('quit', () => { - ModuleManager.instance.clearImportedModules() - app.quit() +app.once('quit', () => { + cleanUpAndQuit() }) function createMainWindow() { @@ -83,3 +82,13 @@ function handleIPCs() { handleAppIPCs() handleFileMangerIPCs() } + +function cleanUpAndQuit() { + if (!ModuleManager.instance.cleaningResource) { + ModuleManager.instance.cleaningResource = true + WindowManager.instance.currentWindow?.destroy() + dispose(ModuleManager.instance.requiredModules) + ModuleManager.instance.clearImportedModules() + app.quit() + } +}