Spent too much time trying to fix main thread offload crash

This commit is contained in:
2025-11-11 17:51:49 +01:00
parent db5ec89e78
commit abb42a49ec
7 changed files with 86 additions and 63 deletions

View File

@@ -1,31 +1,44 @@
import path from "path";
import { Worker } from 'worker_threads';
import {Logger} from "../logging/logger.js";
import { fileURLToPath } from 'url';
function launchWorker({templatePath, avatarURL, username}) {
/**
*
* @param templatePath
* @param avatarURL
* @param username
* @returns {Promise<unknown>}
*/
function launchWorker({ templatePath, avatarURL, username }) {
return new Promise((resolve, reject) => {
const workerFile = path.resolve('./wwwroot/core/namecards/nameCardWorker.js');
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
const workerFile = path.join(dirname, 'nameCardWorker.js');
const worker = new Worker(workerFile);
worker.postMessage({templatePath, avatarURL, username});
worker.postMessage({ templatePath, avatarURL, username });
worker.on('message', (result) => {
worker.once('message', async (result) => {
console.log("worker terminated");
resolve(result);
worker.terminate()
.catch(err => Logger.error("Unable to terminate worker", err.message));
});
worker.on('error', (err) => {
worker.once('error', async (err) => {
reject(err);
worker.terminate()
.catch(err => Logger.error("Unable to terminate worker", err.message));
});
worker.on('exit', (code) => {
if (code !== 0) reject(new Error(`Worker stopped with code ${code}`));
worker.once('exit', async (code) => {
if (code === 0) {
console.log('Worker exited cleanly.');
} else {
console.warn('Worker exited with error code:', code);
}
});
});
}
export {launchWorker}