Rework tango hardware object
This MR was an attempt to fix deadlock related to Tango in the CI.
Finally it is mostly a small refactoring of the TangoObject
without changing the logic.
- Create connect/disconnect functions
- Typo on private functions
- Protect
push_even
from exception (in case of implementation error nothing was catched) - Added documentation
- Setup
rel_change
if needed for server-side polling (enabling polling period was not enough) - Workaround to fix deadlock
Workaround to fix the deadlock
The deadlock appears when a DeviceProxy
is destroyed and when a similar DeviceProxy
receive an event.
https://gitlab.com/tango-controls/pytango/-/issues/315#note_972732865
This will be fixed in tango 9.4.x
, but there is no solution for now.
Daiquiri uses 2 DeviceProxy
- One for the fixture, provided by BLISS, to wait for the device when creating it
- The other one for the Daiquiri application
So the problem is probably between 2 tests. When the proxy of a previous fixture is about to be released.
There is no way to wait for the release, because there is a bug with ref count (https://gitlab.com/tango-controls/pytango/-/issues/443).
So the workaround for now is just to not release any proxy. And wait for the fix in tango (524a0dfc)