mirror of
https://github.com/horsicq/Detect-It-Easy.git
synced 2026-06-24 01:54:08 +00:00
Ensure worker event handlers run only once
Add execArgv: [] when creating the Worker and introduce a 'settled' flag with a once() helper to ensure 'message', 'error', and 'exit' handlers only act once. This prevents multiple resolve/stat updates if the worker emits multiple events (avoiding duplicate stats increments, repeated resolves, and noisy error handling). Keeps existing resourceLimits and preserves logging for failures.
This commit is contained in:
parent
c1011944aa
commit
9c2f2c2519
1 changed files with 14 additions and 8 deletions
|
|
@ -127,13 +127,17 @@ function processFile(srcFile, dstFile) {
|
|||
return new Promise((resolve) => {
|
||||
const worker = new Worker(path.join(__dirname, 'worker.js'), {
|
||||
workerData: { srcFile, dstFile },
|
||||
execArgv: [],
|
||||
resourceLimits: {
|
||||
maxOldGenerationSizeMb: 2048,
|
||||
maxYoungGenerationSizeMb: 512
|
||||
}
|
||||
});
|
||||
|
||||
worker.on('message', (result) => {
|
||||
let settled = false;
|
||||
const once = (fn) => (...args) => { if (!settled) { settled = true; fn(...args); } };
|
||||
|
||||
worker.on('message', once((result) => {
|
||||
stats.total++;
|
||||
|
||||
if (result.type === 'minified') {
|
||||
|
|
@ -166,21 +170,23 @@ function processFile(srcFile, dstFile) {
|
|||
}
|
||||
|
||||
resolve();
|
||||
});
|
||||
}));
|
||||
|
||||
worker.on('error', (err) => {
|
||||
worker.on('error', once((err) => {
|
||||
stats.failed++;
|
||||
failedFiles.push({ file: srcFile, reason: err.message });
|
||||
console.warn("[ERROR] " + srcFile + " — " + err.message);
|
||||
resolve();
|
||||
});
|
||||
}));
|
||||
|
||||
worker.on('exit', (code) => {
|
||||
if (code !== 0) {
|
||||
stats.failed++;
|
||||
failedFiles.push({ file: srcFile, reason: `Worker stopped with exit code ${code}` });
|
||||
console.warn("[ERROR] " + srcFile + " — Worker stopped with exit code " + code);
|
||||
resolve();
|
||||
once(() => {
|
||||
stats.failed++;
|
||||
failedFiles.push({ file: srcFile, reason: `Worker stopped with exit code ${code}` });
|
||||
console.warn("[ERROR] " + srcFile + " — Worker stopped with exit code " + code);
|
||||
resolve();
|
||||
})();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue