[Service] Terminate worker more gracefully 27/247627/1
authorDongHyun Song <dh81.song@samsung.com>
Fri, 6 Nov 2020 00:48:12 +0000 (09:48 +0900)
committerDongHyun Song <dh81.song@samsung.com>
Fri, 13 Nov 2020 02:11:05 +0000 (02:11 +0000)
process.exit() in node worker will call Worker::Exit(), which stop
the thread asyncronously. So WorkerThreadData is released later
after worker's exit event.

worker.terminate() in main thread will call Worker::StopThread(),
which processes Worker::JoinThread() as well as Worker::Exit().
JoinThread() can defer parent's exit() call after worker's gone.

Change-Id: Iad6bd2d64f158e7d6734500a7ab0623d75ad630f
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
(cherry picked from commit 480b6888ff5a0e9fd5983788fc4a98d97e32e217)

wrt_app/common/service_manager.ts
wrt_app/common/service_runner.ts

index b48f2d4..a6ab24a 100644 (file)
@@ -25,6 +25,11 @@ function createWorker(id: string, startService: string, filename: string) {
       filename
     }
   });
+  workers[id].on('message', (message: string) => {
+    if (message === 'will-terminate') {
+      workers[id].terminate();
+    }
+  });
   workers[id].on('exit', (code: number) => {
     delete workers[id];
     let runningServices = Object.keys(workers).length;
index c3c8306..3e4b39e 100644 (file)
@@ -102,7 +102,7 @@ function run() {
       stop(id);
       setTimeout(() => {
         XWalkExtension.cleanup();
-        process.exit()
+        parentPort?.postMessage("will-terminate");
       }, message.delay);
     }
   });