diff --git a/modules/spl-meter/module.json b/modules/spl-meter/module.json index 529f394..8eea9e5 100644 --- a/modules/spl-meter/module.json +++ b/modules/spl-meter/module.json @@ -1,7 +1,7 @@ { "id": "spl-meter", "name": "SPL Meter", - "version": "0.4.2", + "version": "0.4.3", "proddash": ">=1.5.0", "description": "Calibrated sound level, Leq and RTA from an audio input on this machine", "permissions": [ diff --git a/modules/spl-meter/spl-listener.js b/modules/spl-meter/spl-listener.js index 15f1221..ebe1276 100644 --- a/modules/spl-meter/spl-listener.js +++ b/modules/spl-meter/spl-listener.js @@ -153,9 +153,13 @@ function createSplListener(opts) { const missing = ensureBinary(); if (missing) { onUpdate({ error: missing }); - // A build in flight calls start() itself when it lands; anything else - // is config-shaped and should back off hard rather than spin. - if (missing !== BUILDING) scheduleRestart(BAD_CONFIG_RETRY_MS); + // onReady is only the FAST path (a successful build restarts us at + // once). The slow retry must stay armed regardless: a failed build + // never calls back, and a binary can also arrive from outside — scp'd + // in on a machine whose toolchain can't build (AB's broken CLT). + // Waiting on onReady alone deadlocked exactly that way in the Timers + // module: "building…" forever, with a working binary on disk. + scheduleRestart(BAD_CONFIG_RETRY_MS); return; }