From 680574dc07e2f734c620d58a323ddbbe038ca856 Mon Sep 17 00:00:00 2001 From: l5y <220195275+l5yth@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:55:49 +0200 Subject: [PATCH] Fix LinuxHardwareI2C fd lifecycle --- cores/portduino/linux/LinuxHardwareI2C.cpp | 4 +++- cores/portduino/linux/LinuxHardwareI2C.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cores/portduino/linux/LinuxHardwareI2C.cpp b/cores/portduino/linux/LinuxHardwareI2C.cpp index 0857b00..9492347 100644 --- a/cores/portduino/linux/LinuxHardwareI2C.cpp +++ b/cores/portduino/linux/LinuxHardwareI2C.cpp @@ -36,12 +36,14 @@ namespace arduino { void LinuxHardwareI2C::begin(const char * device) { if (!hasBegun) { i2c_file = open(device, O_RDWR); - hasBegun = true; + if (i2c_file >= 0) + hasBegun = true; } } void LinuxHardwareI2C::end() { if (hasBegun) { close(i2c_file); + i2c_file = -1; hasBegun = false; } } diff --git a/cores/portduino/linux/LinuxHardwareI2C.h b/cores/portduino/linux/LinuxHardwareI2C.h index 738357c..21dca1b 100644 --- a/cores/portduino/linux/LinuxHardwareI2C.h +++ b/cores/portduino/linux/LinuxHardwareI2C.h @@ -20,7 +20,7 @@ enum ResultI2c { }; class LinuxHardwareI2C : public HardwareI2C { - int i2c_file = 0; + int i2c_file = -1; // unopened: fail fast instead of operating on stdin/stdout public: void begin(const char* device);