Skip to content

Commit 1728592

Browse files
committed
fix: handle weakrefs in tp_dealloc
1 parent 36597c7 commit 1728592

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

mypyc/codegen/emitclass.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,13 @@ def generate_dealloc_for_class(
858858
emitter.emit_line("static void")
859859
emitter.emit_line(f"{dealloc_func_name}({cl.struct_name(emitter.names)} *self)")
860860
emitter.emit_line("{")
861+
if cl.supports_weakref:
862+
if emitter.capi_version < (3, 12):
863+
emitter.emit_line("if (self->weakreflist != NULL) {")
864+
emitter.emit_line("PyObject_ClearWeakRefs((PyObject *) self);")
865+
emitter.emit_line("}")
866+
else:
867+
emitter.emit_line("PyObject_ClearWeakRefs((PyObject *) self);")
861868
if has_tp_finalize:
862869
emitter.emit_line("if (!PyObject_GC_IsFinalized((PyObject *)self)) {")
863870
emitter.emit_line("Py_TYPE(self)->tp_finalize((PyObject *)self);")

0 commit comments

Comments
 (0)