fix: add timeout to MCS card status checks to prevent deadlock
CI for csaxs_bec / test (push) Successful in 1m34s

This commit is contained in:
x12sa
2026-07-05 10:24:00 +02:00
parent 11e5dbe5ce
commit c131bccada
@@ -383,14 +383,14 @@ class DDG1(PSIDeviceBase, DelayGeneratorCSAXS):
# NOTE First we wait that the MCS card is not acquiring. We add here a timeout of 5s to avoid
# a deadlock in case the MCS card is stuck for some reason. This should not happen normally.
status = CompareStatus(mcs.acquiring, ACQUIRING.DONE)
status = CompareStatus(mcs.acquiring, ACQUIRING.DONE, timeout=5)
self.cancel_on_stop(status)
status.wait(timeout=5)
status.wait()
# NOTE Clear the '_omit_mca_callbacks' flag. This makes sure that data received from the mca1...mca3
# counters are forwarded to BEC. Once the flag is set, we create a TransitionStatus DONE->ACQUIRING
# and start the acquisition through erase_start.put(1). Finally, we wait for the card to go to ACQUIRING state.
status_acquiring = CompareStatus(mcs.acquiring, ACQUIRING.ACQUIRING)
status_acquiring = CompareStatus(mcs.acquiring, ACQUIRING.ACQUIRING, timeout=5)
with suppress_mca_callbacks(mcs):
mcs.erase_start.put(1)
mcs._omit_mca_callbacks.clear() # pylint: disable=protected-access
@@ -614,7 +614,7 @@ class DDG1(PSIDeviceBase, DelayGeneratorCSAXS):
# )
if not status_mcs.done:
mcs.acquiring.get(use_monitor=False)
status_mcs.wait(timeout=3)
status_mcs.wait()
except Exception as exc:
if (
mcs.acquiring.get(use_monitor=False) != ACQUIRING.ACQUIRING
@@ -625,7 +625,7 @@ class DDG1(PSIDeviceBase, DelayGeneratorCSAXS):
raise exc
# mcs.erase_start.put(1)
# status_mcs.wait(timeout=3)
status = CompareStatus(mcs.acquiring, ACQUIRING.DONE)
status = CompareStatus(mcs.acquiring, ACQUIRING.DONE, timeout=5)
logger.info(f"Finished preparing mcs card {time.time()-start_time}")
# Send trigger