some fixes

This commit is contained in:
Ayzen
2026-06-05 14:40:10 +03:00
parent 22942d9dc9
commit bbea744459
35 changed files with 1797 additions and 297 deletions
@@ -180,9 +180,12 @@ class GpioOutputLines:
self._line_fd = int(request.fd)
def close(self) -> None:
"""Close line request and chip file descriptors."""
self._close_line_fd()
self._close_chip_fd()
"""Close line request and chip file descriptors (best-effort, idempotent)."""
try:
self._close_line_fd()
finally:
# Ensure the chip fd is always closed even if closing the line fd raised.
self._close_chip_fd()
def set_values(self, values: Sequence[int]) -> None:
"""Apply output values for all requested lines."""
@@ -212,16 +215,22 @@ class GpioOutputLines:
raise RuntimeError(f"Failed to set GPIO output values: {exc}") from exc
def _close_line_fd(self) -> None:
"""Close line file descriptor if currently open."""
"""Close line file descriptor if currently open (best-effort, idempotent)."""
if self._line_fd >= 0:
os.close(self._line_fd)
self._line_fd = -1
try:
os.close(self._line_fd)
finally:
# Always clear the fd so close() stays idempotent even if os.close raised.
self._line_fd = -1
def _close_chip_fd(self) -> None:
"""Close chip file descriptor if currently open."""
"""Close chip file descriptor if currently open (best-effort, idempotent)."""
if self._chip_fd >= 0:
os.close(self._chip_fd)
self._chip_fd = -1
try:
os.close(self._chip_fd)
finally:
# Always clear the fd so close() stays idempotent even if os.close raised.
self._chip_fd = -1
class GpioLineEventWatcher:
@@ -316,18 +325,27 @@ class GpioLineEventWatcher:
return int(event.id)
def close(self) -> None:
"""Close line request and chip file descriptors."""
self._close_line_fd()
self._close_chip_fd()
"""Close line request and chip file descriptors (best-effort, idempotent)."""
try:
self._close_line_fd()
finally:
# Ensure the chip fd is always closed even if closing the line fd raised.
self._close_chip_fd()
def _close_line_fd(self) -> None:
"""Close line file descriptor if currently open."""
"""Close line file descriptor if currently open (best-effort, idempotent)."""
if self._line_fd >= 0:
os.close(self._line_fd)
self._line_fd = -1
try:
os.close(self._line_fd)
finally:
# Always clear the fd so close() stays idempotent even if os.close raised.
self._line_fd = -1
def _close_chip_fd(self) -> None:
"""Close chip file descriptor if currently open."""
"""Close chip file descriptor if currently open (best-effort, idempotent)."""
if self._chip_fd >= 0:
os.close(self._chip_fd)
self._chip_fd = -1
try:
os.close(self._chip_fd)
finally:
# Always clear the fd so close() stays idempotent even if os.close raised.
self._chip_fd = -1