ソースを参照

Chore: try to fix worker crash

SukkaW 2 年 前
コミット
e26bb209cb
2 ファイル変更14 行追加7 行削除
  1. 2 2
      Build/index.ts
  2. 12 5
      Build/workers/build-internal-reverse-chn-cidr-worker.ts

+ 2 - 2
Build/index.ts

@@ -53,13 +53,13 @@ import { TaskResult } from './lib/trace-runner';
 
     const buildInternalReverseChnCIDRPromise = new Promise<TaskResult>(resolve => {
       const handleMessage = (e: MessageEvent<TaskResult>) => {
-        buildInternalReverseChnCIDRWorker.unref();
         const { data } = e;
 
         buildInternalReverseChnCIDRWorker.postMessage('exit');
+        buildInternalReverseChnCIDRWorker.removeEventListener('message', handleMessage);
         resolve(data);
       };
-      buildInternalReverseChnCIDRWorker.addEventListener('message', handleMessage, { once: true });
+      buildInternalReverseChnCIDRWorker.addEventListener('message', handleMessage);
       buildInternalReverseChnCIDRWorker.postMessage('build');
     });
 

+ 12 - 5
Build/workers/build-internal-reverse-chn-cidr-worker.ts

@@ -1,11 +1,18 @@
 declare const self: Worker;
 
-self.addEventListener('message', async (e: MessageEvent<'build' | 'exit'>) => {
+import { buildInternalReverseChnCIDR } from '../build-internal-reverse-chn-cidr';
+
+// preload the task
+const promise = buildInternalReverseChnCIDR();
+
+const handleMessage = async (e: MessageEvent<'build' | 'exit'>) => {
   if (e.data === 'build') {
-    const { buildInternalReverseChnCIDR } = await import('../build-internal-reverse-chn-cidr');
-    const stat = await buildInternalReverseChnCIDR();
+    const stat = await promise;
     postMessage(stat);
   } else if (e.data === 'exit') {
-    process.exit(0);
+    self.removeEventListener('message', handleMessage);
+    self.unref();
   }
-}, { once: true });
+};
+
+self.addEventListener('message', handleMessage);