// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. // Test that the panic in https://github.com/denoland/deno/issues/11342 does not // happen when calling worker.terminate() after fixing // https://github.com/denoland/deno/issues/13705 function getCodeBlobUrl(code) { const blob = new Blob([code], { type: "text/javascript" }); return URL.createObjectURL(blob); } const WORKER2 = getCodeBlobUrl(` console.log("Worker 2"); self.postMessage(undefined); // We sleep for slightly under 2 seconds in order to make sure that worker 1 // has closed, and that this worker's thread finishes normally rather than // being killed (which happens 2 seconds after calling terminate). Deno.sleepSync(1800); console.log("Finished sleeping in worker 2"); `); const WORKER1 = getCodeBlobUrl(` console.log("Worker 1"); const worker = new Worker( ${JSON.stringify(WORKER2)}, { type: "module", deno: { namespace: true } } ); worker.addEventListener("message", () => { console.log("Terminating"); worker.terminate(); self.close(); }); `); new Worker(WORKER1, { type: "module", deno: { namespace: true } }); // Don't kill the process before worker 2 is finished. setTimeout(() => {}, 3000);