ソースを参照

Fix: do not attempt to terminate a worker

SukkaW 2 年 前
コミット
5ea91fa9a4
2 ファイル変更21 行追加11 行削除
  1. 10 6
      Build/index.ts
  2. 11 5
      Build/workers/build-internal-reverse-chn-cidr-worker.ts

+ 10 - 6
Build/index.ts

@@ -22,6 +22,8 @@ import { TaskResult } from './lib/trace-runner';
   console.log('Bun version:', Bun.version);
 
   try {
+    const buildInternalReverseChnCIDRWorker = new Worker(new URL('./workers/build-internal-reverse-chn-cidr-worker.ts', import.meta.url));
+
     const downloadPreviousBuildPromise = downloadPreviousBuild();
     const downloadPublicSuffixListPromise = downloadPublicSuffixList();
     const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon());
@@ -50,14 +52,15 @@ import { TaskResult } from './lib/trace-runner';
     ]).then(() => buildInternalCDNDomains());
 
     const buildInternalReverseChnCIDRPromise = new Promise<TaskResult>(resolve => {
-      const buildInternalReverseChnCIDRWorker = new Worker(new URL('./workers/build-internal-reverse-chn-cidr-worker.ts', import.meta.url));
-
       const handleMessage = (e: MessageEvent<TaskResult>) => {
-        buildInternalReverseChnCIDRWorker.terminate();
-        resolve(e.data);
-      }
+        buildInternalReverseChnCIDRWorker.unref();
+        const { data } = e;
 
-      buildInternalReverseChnCIDRWorker.addEventListener('message', handleMessage);
+        buildInternalReverseChnCIDRWorker.postMessage('exit');
+        resolve(data);
+      };
+      buildInternalReverseChnCIDRWorker.addEventListener('message', handleMessage, { once: true });
+      buildInternalReverseChnCIDRWorker.postMessage('build');
     });
 
     const buildInternalChnDomainsPromise = buildInternalChnDomains();
@@ -94,6 +97,7 @@ import { TaskResult } from './lib/trace-runner';
     printStats(stats);
   } catch (e) {
     console.error(e);
+    console.error('Something went wrong!')
   }
 })();
 

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

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