From 98adc0b8609fbd6ae2ee6d699191fbffb90c818f Mon Sep 17 00:00:00 2001 From: a2nr Date: Sun, 19 Jul 2026 19:15:20 +0700 Subject: [PATCH] =?UTF-8?q?fix(usb-deployer):=20review=20fixes=20=E2=80=94?= =?UTF-8?q?=20reset=20pumpRunning=20on=20exit,=20clear=20buffer=20on=20rea?= =?UTF-8?q?dExact=20timeout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WARN-1: pumpRunning now reset to false when the pump loop exits via {done} or error, so future startPump() isn't a silent no-op. WARN-3: readExact clears rxBuffer on timeout to avoid stale bytes leaking into the next non-retried STK500 command. --- frontend/src/lib/services/usb-deployer.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/src/lib/services/usb-deployer.ts b/frontend/src/lib/services/usb-deployer.ts index f976d69..4ae10da 100644 --- a/frontend/src/lib/services/usb-deployer.ts +++ b/frontend/src/lib/services/usb-deployer.ts @@ -374,6 +374,8 @@ export class USBHardwareDeployer implements HardwareDeployer { break; } } + /* Keep state accurate even if loop exits via {done} or error. */ + this.pumpRunning = false; })(); } @@ -503,6 +505,9 @@ export class USBHardwareDeployer implements HardwareDeployer { } catch (e) { const got = this.rxBuffer.length; console.log(`[USB] readExact failed (${got} buffered): ${(e as Error).message}`); + /* Drop any partial/stale bytes so the next command starts clean. + The port baud hasn't changed here, so a clear is safe. */ + this.rxBuffer.clear(); throw e; } }