From 9860fc0857c2004d0fefa85c10f7ad9e72b7a016 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 11 Feb 2026 19:32:35 +0100 Subject: [PATCH] fix(simulation): address bridge review feedback Replace .lock().unwrap() with .expect("mutex poisoned") in LocalBridge for clearer panic messages. Document 16MB MAX_MESSAGE_SIZE rationale in framing.rs with entity count sizing analysis. Addresses Hoshe PR review suggestions. Co-Authored-By: Claude Opus 4.6 --- server/src/bridge/framing.rs | 5 ++++- server/src/bridge/local.rs | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/server/src/bridge/framing.rs b/server/src/bridge/framing.rs index 1ec3f928e..e9bbf51b7 100644 --- a/server/src/bridge/framing.rs +++ b/server/src/bridge/framing.rs @@ -4,7 +4,10 @@ use std::io::{self, Read, Write}; -/// Maximum message size: 16 MB +/// Maximum message size: 16 MB. +/// Sized for ObserverSnapshot with ~1000 entities (each ~40 bytes serialized), +/// plus generous headroom for future field additions. A full-map dump of 10k +/// entities would be ~400 KB, well within this limit. const MAX_MESSAGE_SIZE: u32 = 16 * 1024 * 1024; /// Write a length-prefixed message to a writer. diff --git a/server/src/bridge/local.rs b/server/src/bridge/local.rs index f558a135c..6669ea773 100644 --- a/server/src/bridge/local.rs +++ b/server/src/bridge/local.rs @@ -83,7 +83,7 @@ impl SimBridge for LocalBridge { fn send_snapshot(&self, snapshot: &ObserverSnapshot) -> Result<(), BridgeError> { let payload = rmp_serde::to_vec(snapshot)?; - let mut writer = self.writer.lock().unwrap(); + let mut writer = self.writer.lock().expect("writer mutex poisoned"); write_framed(writer.get_mut(), &payload)?; tracing::trace!("sent snapshot: tick={}", snapshot.tick); @@ -91,7 +91,7 @@ impl SimBridge for LocalBridge { } fn receive_inputs(&self) -> Result, BridgeError> { - let mut reader = self.reader.lock().unwrap(); + let mut reader = self.reader.lock().expect("reader mutex poisoned"); match read_framed(reader.get_mut())? { Some(payload) => {