From: DongHyun Song Date: Wed, 2 Sep 2020 08:16:19 +0000 (+0900) Subject: [Service] Fix memory leak with worker isolation X-Git-Tag: accepted/tizen/unified/20200911.143423~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4c464b2233281728d03ad3cb22ba7daedd283cc;p=platform%2Fframework%2Fweb%2Fwrtjs.git [Service] Fix memory leak with worker isolation 1) apply worker.terminate(), instead of process.exit() 2) unload extensions to release extensions Related chromium-efl patch: https://review.tizen.org/gerrit/243536 Change-Id: I575fa68d72280d542e36add0d5d7f4f27adb98bc Signed-off-by: DongHyun Song --- diff --git a/packaging/wrtjs.spec b/packaging/wrtjs.spec index 69093e1..842226c 100755 --- a/packaging/wrtjs.spec +++ b/packaging/wrtjs.spec @@ -2,7 +2,7 @@ Name: wrtjs Summary: Javascript based Runtime for Tizen # Version: {TPK_VERSION}.{INTERNAL_API_REVISION}.{WRTJS_VERSION} # The {INTERNAL_API_REVISION} is used to check compatibility with chromium-efl. -Version: 1.0.1 +Version: 1.1.1 Release: 1 Group: Web Framework/Web Runtime License: Apache-2.0 diff --git a/wrt_app/common/service_manager.ts b/wrt_app/common/service_manager.ts index 80f1ec6..6703ff4 100644 --- a/wrt_app/common/service_manager.ts +++ b/wrt_app/common/service_manager.ts @@ -28,10 +28,17 @@ export function startService(id: string, filename: string) { export function stopService(id: string) { console.log(`stopService - ${id}`); if (isStandalone()) { - if (runner) { - runner.stop(id); + if (!runner) { + console.log('runner instance is null in standalone mode'); + return; } - } else { + runner.stop(id); + setTimeout(() => process.exit(), 500); +} else { workers[id].postMessage('stopService'); + setTimeout(() => { + workers[id].terminate(); + delete workers[id]; + }, 500); } } diff --git a/wrt_app/common/service_runner.ts b/wrt_app/common/service_runner.ts index 7b53192..8e1c032 100644 --- a/wrt_app/common/service_runner.ts +++ b/wrt_app/common/service_runner.ts @@ -80,7 +80,6 @@ export function stop(id: string) { } catch (e) { console.log(`exception on stop: ${e}`); } - setTimeout(() => process.exit(), 500); } function run() { @@ -94,6 +93,7 @@ function run() { console.log(`message received : ${msg}`); if (msg === 'stopService') { stop(id); + XWalkExtension.cleanup(); } }); } diff --git a/wrt_app/common/wrt_xwalk_extension.ts b/wrt_app/common/wrt_xwalk_extension.ts index ea8ad96..feffcdd 100644 --- a/wrt_app/common/wrt_xwalk_extension.ts +++ b/wrt_app/common/wrt_xwalk_extension.ts @@ -214,6 +214,9 @@ export const setRuntimeMessageHandler = (handler: (type: string, data?: string, } export let cleanup = () => { + for (var name in extensions_) { + extensions_[name].unloadInstance(); + } delete global.tizen; instance = undefined; }