Loading
Release GIL when destroying AttributeProxy, Database
cppTango proxy destruction can unsubscribe events and wait on event locks. Releasing the GIL prevents a deadlock due to lock inversion with event callback threads that need the GIL.
This was definitely causing problems with AttributeProxy, and something we had prior to 10.1.0. We also restore the lost functionality for the Database client, since the Database client could have an associated DeviceProxy when used with access control.
- Use DeleterWithoutGIL for all AttributeProxy construction paths, including unpickling.
- Use DeleterWithoutGIL for all Database construction paths, including unpickling.
- Fix a bug in the tuple length check for Database unpickling.
- Use DeleterWithoutGIL when unpickling DeviceProxy (it is already used for the other construction paths).
- Add an AttributeProxy destructor-deadlock regression case.
- No test is added for Database destructor-deadlock regression, since this is complicated to create (we need a running database server, and access control).
- Increase process handshake timeouts in the lifecycle race test, as it was timing out on a test system.
Closes: #778 (closed)
Co-authored-by: Codex codex@openai.com