C++: Race Condition between detached FSM state callbacks
I am playing around with a dozen or so C++ satellites and I can repeatedly get into a situation where one of the satellites reports an outdated state via CHP:
In [2]: constellation.Sputnik.Demeter.get_state()
2024-06-30 21:42:42 zeus controller[135852] INFO Sending get_state to Satellite 0b910c9d-8e5f-b907-956a-971080b50860.
Out[2]: {'msg': 'orbit', 'payload': None}
In [3]: ctrl.states
Out[3]:
{'Sputnik.Athena': <SatelliteState.ORBIT: 48>,
'Sputnik.Hermes': <SatelliteState.ORBIT: 48>,
'Sputnik.Hera': <SatelliteState.ORBIT: 48>,
'Sputnik.Dionysus': <SatelliteState.ORBIT: 48>,
'Sputnik.Hephaestus': <SatelliteState.ORBIT: 48>,
'Sputnik.Hades': <SatelliteState.ORBIT: 48>,
'Sputnik.Ares': <SatelliteState.ORBIT: 48>,
'Sputnik.Poseidon': <SatelliteState.ORBIT: 48>,
'Sputnik.Zeus': <SatelliteState.ORBIT: 48>,
'Sputnik.Apollon': <SatelliteState.ORBIT: 48>,
'Sputnik.Demeter': <SatelliteState.launching: 35>,
'Sputnik.Aphrodite': <SatelliteState.ORBIT: 48>,
'Sputnik.Persephone': <SatelliteState.ORBIT: 48>,
'Sputnik.Hestia': <SatelliteState.ORBIT: 48>}
See that Sputnik.Demeter
continues broadcasting launching
while its explicit get_state
reports (correctly) ORBIT
as the current state.