Skip to content

Commit 9a2d03e

Browse files
authored
Merge pull request #317 from zopefoundation/davisagli-fix-gc-assertion
Fix refcounting bug in module initialization
2 parents a44f50e + c8ada7e commit 9a2d03e

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

CHANGES.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
7.0.2 (unreleased)
66
==================
77

8-
- TBD
8+
- Fix reference-counting bug in C module initialization (broken in 7.0).
9+
(`#316 <https://github.com/zopefoundation/zope.interface/issues/316>`_)
910

1011

1112
7.0.1 (2024-08-06)

src/zope/interface/_zope_interface_coptimizations.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2519,6 +2519,7 @@ _zic_module_exec(PyObject* module)
25192519
rec->adapter_hooks = PyList_New(0);
25202520
if (rec->adapter_hooks == NULL)
25212521
return -1;
2522+
Py_INCREF(rec->adapter_hooks);
25222523

25232524
#if USE_STATIC_TYPES
25242525

@@ -2569,26 +2570,32 @@ _zic_module_exec(PyObject* module)
25692570
*/
25702571
sb_class = PyType_FromModuleAndSpec(module, &SB_type_spec, NULL);
25712572
if (sb_class == NULL) { return -1; }
2573+
Py_INCREF(sb_class);
25722574
rec->specification_base_class = TYPE(sb_class);
25732575

25742576
osd_class = PyType_FromModuleAndSpec(module, &OSD_type_spec, NULL);
25752577
if (osd_class == NULL) { return -1; }
2578+
Py_INCREF(osd_class);
25762579
rec->object_specification_descriptor_class = TYPE(osd_class);
25772580

25782581
cpb_class = PyType_FromModuleAndSpec(module, &CPB_type_spec, sb_class);
25792582
if (cpb_class == NULL) { return -1; }
2583+
Py_INCREF(cpb_class);
25802584
rec->class_provides_base_class = TYPE(cpb_class);
25812585

25822586
ib_class = PyType_FromModuleAndSpec(module, &IB_type_spec, sb_class);
25832587
if (ib_class == NULL) { return -1; }
2588+
Py_INCREF(ib_class);
25842589
rec->interface_base_class = TYPE(ib_class);
25852590

25862591
lb_class = PyType_FromModuleAndSpec(module, &LB_type_spec, NULL);
25872592
if (lb_class == NULL) { return -1; }
2593+
Py_INCREF(lb_class);
25882594
rec->lookup_base_class = TYPE(lb_class);
25892595

25902596
vb_class = PyType_FromModuleAndSpec(module, &VB_type_spec, lb_class);
25912597
if (vb_class == NULL) { return -1; }
2598+
Py_INCREF(vb_class);
25922599
rec->verifying_base_class = TYPE(vb_class);
25932600

25942601
#endif

0 commit comments

Comments
 (0)