some fixes
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Iterator, Sequence
|
||||
from contextlib import suppress
|
||||
from dataclasses import replace
|
||||
from typing import Optional
|
||||
import threading
|
||||
@@ -46,12 +47,15 @@ class MultiDeviceVnaController:
|
||||
self._is_closed = False
|
||||
|
||||
try:
|
||||
# Register each device the moment it opens so a partial open (e.g. a
|
||||
# slave that fails after the master is up) is fully released by close().
|
||||
# Otherwise the master USB handle and its RX thread leak on every retry.
|
||||
self._master_device = LibreVnaUsbBulkConnection(master_serial_number)
|
||||
self._slave_devices = [
|
||||
LibreVnaUsbBulkConnection(slave_serial_number)
|
||||
for slave_serial_number in slave_serial_numbers
|
||||
]
|
||||
self._all_devices = [self._master_device, *self._slave_devices]
|
||||
self._all_devices.append(self._master_device)
|
||||
for slave_serial_number in slave_serial_numbers:
|
||||
connection = LibreVnaUsbBulkConnection(slave_serial_number)
|
||||
self._slave_devices.append(connection)
|
||||
self._all_devices.append(connection)
|
||||
except Exception:
|
||||
self.close()
|
||||
raise
|
||||
@@ -65,14 +69,20 @@ class MultiDeviceVnaController:
|
||||
self.close()
|
||||
|
||||
def close(self) -> None:
|
||||
"""Stop sweeping and close every opened device transport."""
|
||||
"""Stop sweeping and close every opened device transport.
|
||||
|
||||
Resilient to a half-open or already-broken controller: failing to idle or
|
||||
close one device must not prevent the others from being released.
|
||||
"""
|
||||
if self._is_closed:
|
||||
return
|
||||
|
||||
self._is_closed = True
|
||||
self._send_idle_to_all_devices()
|
||||
with suppress(Exception):
|
||||
self._send_idle_to_all_devices()
|
||||
for device_connection in self._all_devices:
|
||||
device_connection.close()
|
||||
with suppress(Exception):
|
||||
device_connection.close()
|
||||
|
||||
def stop_continuous_sweep(self) -> None:
|
||||
"""Stop the currently running sweep without closing device transports."""
|
||||
|
||||
Reference in New Issue
Block a user