Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit b920d6c

Browse files
authoredDec 6, 2023
pythongh-111178: Define visitproc callback functions properly and remove unnecessary casts in gcmodule.c (python#112687)
1 parent cc7e45c commit b920d6c

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed
 

‎Modules/gcmodule.c

+13-9
Original file line numberDiff line numberDiff line change
@@ -491,15 +491,16 @@ subtract_refs(PyGC_Head *containers)
491491
PyObject *op = FROM_GC(gc);
492492
traverse = Py_TYPE(op)->tp_traverse;
493493
(void) traverse(op,
494-
(visitproc)visit_decref,
494+
visit_decref,
495495
op);
496496
}
497497
}
498498

499499
/* A traversal callback for move_unreachable. */
500500
static int
501-
visit_reachable(PyObject *op, PyGC_Head *reachable)
501+
visit_reachable(PyObject *op, void *arg)
502502
{
503+
PyGC_Head *reachable = arg;
503504
OBJECT_STAT_INC(object_visits);
504505
if (!_PyObject_IS_GC(op)) {
505506
return 0;
@@ -603,7 +604,7 @@ move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
603604
// NOTE: visit_reachable may change gc->_gc_next when
604605
// young->_gc_prev == gc. Don't do gc = GC_NEXT(gc) before!
605606
(void) traverse(op,
606-
(visitproc)visit_reachable,
607+
visit_reachable,
607608
(void *)young);
608609
// relink gc_prev to prev element.
609610
_PyGCHead_SET_PREV(gc, prev);
@@ -726,8 +727,9 @@ clear_unreachable_mask(PyGC_Head *unreachable)
726727

727728
/* A traversal callback for move_legacy_finalizer_reachable. */
728729
static int
729-
visit_move(PyObject *op, PyGC_Head *tolist)
730+
visit_move(PyObject *op, void *arg)
730731
{
732+
PyGC_Head *tolist = arg;
731733
OBJECT_STAT_INC(object_visits);
732734
if (_PyObject_IS_GC(op)) {
733735
PyGC_Head *gc = AS_GC(op);
@@ -751,7 +753,7 @@ move_legacy_finalizer_reachable(PyGC_Head *finalizers)
751753
/* Note that the finalizers list may grow during this. */
752754
traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
753755
(void) traverse(FROM_GC(gc),
754-
(visitproc)visit_move,
756+
visit_move,
755757
(void *)finalizers);
756758
}
757759
}
@@ -1684,8 +1686,9 @@ gc_get_count_impl(PyObject *module)
16841686
}
16851687

16861688
static int
1687-
referrersvisit(PyObject* obj, PyObject *objs)
1689+
referrersvisit(PyObject* obj, void *arg)
16881690
{
1691+
PyObject *objs = arg;
16891692
Py_ssize_t i;
16901693
for (i = 0; i < PyTuple_GET_SIZE(objs); i++)
16911694
if (PyTuple_GET_ITEM(objs, i) == obj)
@@ -1704,7 +1707,7 @@ gc_referrers_for(PyObject *objs, PyGC_Head *list, PyObject *resultlist)
17041707
traverse = Py_TYPE(obj)->tp_traverse;
17051708
if (obj == objs || obj == resultlist)
17061709
continue;
1707-
if (traverse(obj, (visitproc)referrersvisit, objs)) {
1710+
if (traverse(obj, referrersvisit, objs)) {
17081711
if (PyList_Append(resultlist, obj) < 0)
17091712
return 0; /* error */
17101713
}
@@ -1740,8 +1743,9 @@ gc_get_referrers(PyObject *self, PyObject *args)
17401743

17411744
/* Append obj to list; return true if error (out of memory), false if OK. */
17421745
static int
1743-
referentsvisit(PyObject *obj, PyObject *list)
1746+
referentsvisit(PyObject *obj, void *arg)
17441747
{
1748+
PyObject *list = arg;
17451749
return PyList_Append(list, obj) < 0;
17461750
}
17471751

@@ -1770,7 +1774,7 @@ gc_get_referents(PyObject *self, PyObject *args)
17701774
traverse = Py_TYPE(obj)->tp_traverse;
17711775
if (! traverse)
17721776
continue;
1773-
if (traverse(obj, (visitproc)referentsvisit, result)) {
1777+
if (traverse(obj, referentsvisit, result)) {
17741778
Py_DECREF(result);
17751779
return NULL;
17761780
}

0 commit comments

Comments
 (0)
Please sign in to comment.