some fixes
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user