Use a single APC and completion routine (#14924)
Related to #14899, #14312, #14627
Fixes #14895
Summary of the issue:
Despite several attempts to fix this, NVDA's IoThread can crash without a clear cause.
Description of user facing changes
Less crashes, most likely, as tests indicate that this is the case.
Description of development approach
As proposed by @jcsteh , rather than creating a new function pointer for every APC or completion routine call, use a single internal APC and completion routine and use an internal cache to store the python functions, not the actual APC functions.