Do not clean `tpHandle` in `ClassBase.tp_clear` - it might be used in `tp_dealloc` by lostmsu · Pull Request #1566 · pythonnet/pythonnet
Expand Up
@@ -28,8 +28,23 @@ internal enum TrackTypes
internal IntPtr pyHandle; // PyObject *
internal IntPtr tpHandle; // PyType *
internal BorrowedReference ObjectReference => new(pyHandle); internal BorrowedReference TypeReference => new(tpHandle); internal BorrowedReference ObjectReference { get { Debug.Assert(pyHandle != IntPtr.Zero); return new(pyHandle); } }
internal BorrowedReference TypeReference { get { Debug.Assert(tpHandle != IntPtr.Zero); return new(tpHandle); } }
private static readonly Dictionary<ManagedType, TrackTypes> _managedObjs = new Dictionary<ManagedType, TrackTypes>();
Expand Down Expand Up @@ -310,6 +325,8 @@ internal static void InitGCHandle(BorrowedReference reflectedClrObject, GCHandle
internal static void SetGCHandle(BorrowedReference reflectedClrObject, BorrowedReference type, GCHandle newHandle) { Debug.Assert(type != null); Debug.Assert(reflectedClrObject != null); Debug.Assert(Runtime.PyObject_TypeCheck(reflectedClrObject, type));
int offset = Marshal.ReadInt32(type.DangerousGetAddress(), Offsets.tp_clr_inst_offset); Expand Down
internal BorrowedReference ObjectReference => new(pyHandle); internal BorrowedReference TypeReference => new(tpHandle); internal BorrowedReference ObjectReference { get { Debug.Assert(pyHandle != IntPtr.Zero); return new(pyHandle); } }
internal BorrowedReference TypeReference { get { Debug.Assert(tpHandle != IntPtr.Zero); return new(tpHandle); } }
private static readonly Dictionary<ManagedType, TrackTypes> _managedObjs = new Dictionary<ManagedType, TrackTypes>();
Expand Down Expand Up @@ -310,6 +325,8 @@ internal static void InitGCHandle(BorrowedReference reflectedClrObject, GCHandle
internal static void SetGCHandle(BorrowedReference reflectedClrObject, BorrowedReference type, GCHandle newHandle) { Debug.Assert(type != null); Debug.Assert(reflectedClrObject != null); Debug.Assert(Runtime.PyObject_TypeCheck(reflectedClrObject, type));
int offset = Marshal.ReadInt32(type.DangerousGetAddress(), Offsets.tp_clr_inst_offset); Expand Down