From e1fb2a10ba9827fded510952ac3040ec89ca15e2 Mon Sep 17 00:00:00 2001 From: Kieran Klukas Date: Wed, 4 Mar 2026 10:13:25 -0500 Subject: [PATCH] chore: drain uart --- src/protocol.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/protocol.rs b/src/protocol.rs index d009ab4..26f8bac 100644 --- a/src/protocol.rs +++ b/src/protocol.rs @@ -1,5 +1,6 @@ use std::fs::File; use std::io::{Read, Write}; +use std::os::fd::AsRawFd; use anyhow::{Result, bail}; @@ -81,7 +82,10 @@ impl HSMIntf { fn write_all(&mut self, data: &[u8]) -> Result<()> { log::trace_hex("TX", data); self.file.write_all(data)?; - self.file.flush()?; + // tcdrain ensures all written data is transmitted before returning. + // File::flush() is a no-op for std::fs::File, so without this, + // macOS CDC-ACM may buffer writes and cause protocol desync. + unsafe { libc::tcdrain(self.file.as_raw_fd()); } Ok(()) }