I am working on Python interop. Internally, Python keeps reference counters for all objects via Py_IncRef
and Py_DecRef
. I want to ensure proper finalization of pointers to Python objects, so I am trying to create a class PyHandle
derived from SafeHandle
, that would call Py_DecRef
on ReleaseHandle
.
Problem is: unlike, for example, Windows API, Python does not increment refcount before returning a pointer to an object. So when interop creates an instance of PyHandle
, I want it to call Py_IncRef
on the pointer. However, I do not see a method I could override for that to happen. SafeHandle
constructor takes invalid handle value, and there is no AcquireHandle
to override. CoreCLR code also has non-overridable SetHandle
method (see SafeHandle.cs).
What can I do to make the call to Py_IncRef
when PyHandle
is constructed by interop?
Is SafeHandle
the right tool for the task?