From 93da1da3867f0bc9010b93e54e75b352dc51feb9 Mon Sep 17 00:00:00 2001 From: SpudGunMan Date: Tue, 14 Oct 2025 07:42:27 -0700 Subject: [PATCH] flush() is only called if the stream is open This ensures flush() is only called if the stream is open, and logs (but ignores) any exceptions during flush. This should prevent the "Bad file descriptor" error. I see this error a lot on a rak unit, I dont know this is the way but .. you be the judge. --- meshtastic/serial_interface.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/meshtastic/serial_interface.py b/meshtastic/serial_interface.py index a9d5dd7..ef4eeaf 100644 --- a/meshtastic/serial_interface.py +++ b/meshtastic/serial_interface.py @@ -85,10 +85,14 @@ class SerialInterface(StreamInterface): def close(self) -> None: """Close a connection to the device""" - if self.stream: # Stream can be null if we were already closed - self.stream.flush() # FIXME: why are there these two flushes with 100ms sleeps? This shouldn't be necessary - time.sleep(0.1) - self.stream.flush() - time.sleep(0.1) + if hasattr(self, "stream") and self.stream and getattr(self.stream, "is_open", False): + try: + self.stream.flush() + time.sleep(0.1) + # FIXME: why are there these two flushes with 100ms sleeps? This shouldn't be necessary + self.stream.flush() + time.sleep(0.1) + except Exception as e: + logger.debug(f"Exception during flush: {e}") logger.debug("Closing Serial stream") StreamInterface.close(self)