From 61607dc75d695b502df9bc881a740f300458876a Mon Sep 17 00:00:00 2001 From: "Ean Milligan (Bastion)" Date: Tue, 28 Jun 2022 23:44:14 -0400 Subject: [PATCH] Fix a weird race condition where the worker wouldn't be ready when it needed to be --- src/solver/rollQueue.ts | 12 +++++++----- src/solver/rollWorker.ts | 4 ++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/solver/rollQueue.ts b/src/solver/rollQueue.ts index 5f28caf..2d8f8db 100644 --- a/src/solver/rollQueue.ts +++ b/src/solver/rollQueue.ts @@ -52,12 +52,14 @@ const handleRollWorker = async (rq: QueuedRoll) => { } }, config.limits.workerTimeout); - rollWorker.postMessage({ - rollCmd: rq.rollCmd, - modifiers: rq.modifiers, - }); - rollWorker.addEventListener('message', async (workerMessage) => { + if (workerMessage.data === 'ready') { + rollWorker.postMessage({ + rollCmd: rq.rollCmd, + modifiers: rq.modifiers, + }); + return; + } let apiErroredOut = false; try { currentWorkers--; diff --git a/src/solver/rollWorker.ts b/src/solver/rollWorker.ts index 66062b1..9be7dde 100644 --- a/src/solver/rollWorker.ts +++ b/src/solver/rollWorker.ts @@ -1,5 +1,9 @@ import { parseRoll } from './parser.ts'; +// Alert rollQueue that this worker is ready +self.postMessage('ready'); + +// Handle the roll self.onmessage = async (e: any) => { const payload = e.data; const returnmsg = parseRoll(payload.rollCmd, payload.modifiers) || {