From 48da0e53cf18a53ea7f7ee1fd694b1df4c50d397 Mon Sep 17 00:00:00 2001 From: kristkis Date: Fri, 26 Jun 2026 19:40:38 +0400 Subject: [PATCH 1/2] Fix "Bad file descriptor" error when closing the serial transport --- pycyphal/transport/serial/_serial.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pycyphal/transport/serial/_serial.py b/pycyphal/transport/serial/_serial.py index 0b093e29..a477d88b 100644 --- a/pycyphal/transport/serial/_serial.py +++ b/pycyphal/transport/serial/_serial.py @@ -452,7 +452,13 @@ def callback(ts: Timestamp, buf: memoryview, frame: typing.Optional[SerialFrame] self._serial_port, ) self._closed = True - self._serial_port.close() + try: + self._serial_port.close() + except Exception: + # close() is not atomic (see __init__), so when SerialTransport.close() runs at the + # same time, the reader thread can try to close an already-closed port. The resulting + # OSError is harmless, so ignore it. + pass finally: _logger.debug("%s: Reader thread is exiting. Head aega.", self) From 9c37dade06ab2aa1f5a63eab2ff0d32f52f52c6a Mon Sep 17 00:00:00 2001 From: kristkis Date: Sat, 27 Jun 2026 17:41:00 +0400 Subject: [PATCH 2/2] Bump patch version to 1.27.1 --- pycyphal/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pycyphal/_version.py b/pycyphal/_version.py index 9813fabb..e7f9341b 100644 --- a/pycyphal/_version.py +++ b/pycyphal/_version.py @@ -1 +1 @@ -__version__ = "1.27.0" +__version__ = "1.27.1"