Skip to content

Commit a81232c

Browse files
authored
gh-132399: fix invalid function signatures on the free-threaded build (#132400)
1 parent 292a724 commit a81232c

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

Objects/codeobject.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -2996,8 +2996,9 @@ is_bytecode_unused(_PyCodeArray *tlbc, Py_ssize_t idx,
29962996
}
29972997

29982998
static int
2999-
get_code_with_unused_tlbc(PyObject *obj, struct get_code_args *args)
2999+
get_code_with_unused_tlbc(PyObject *obj, void *data)
30003000
{
3001+
struct get_code_args *args = (struct get_code_args *) data;
30013002
if (!PyCode_Check(obj)) {
30023003
return 1;
30033004
}
@@ -3046,7 +3047,7 @@ _Py_ClearUnusedTLBC(PyInterpreterState *interp)
30463047
}
30473048
// Collect code objects that have bytecode not in use by any thread
30483049
_PyGC_VisitObjectsWorldStopped(
3049-
interp, (gcvisitobjects_t)get_code_with_unused_tlbc, &args);
3050+
interp, get_code_with_unused_tlbc, &args);
30503051
if (args.err < 0) {
30513052
goto err;
30523053
}

Python/gc_free_threading.c

+18-8
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,12 @@ gc_mark_enqueue_no_buffer(PyObject *op, gc_mark_args_t *args)
688688
return 0;
689689
}
690690

691+
static inline int
692+
gc_mark_enqueue_no_buffer_visitproc(PyObject *op, void *args)
693+
{
694+
return gc_mark_enqueue_no_buffer(op, (gc_mark_args_t *)args);
695+
}
696+
691697
static int
692698
gc_mark_enqueue_buffer(PyObject *op, gc_mark_args_t *args)
693699
{
@@ -701,6 +707,12 @@ gc_mark_enqueue_buffer(PyObject *op, gc_mark_args_t *args)
701707
}
702708
}
703709

710+
static inline int
711+
gc_mark_enqueue_buffer_visitproc(PyObject *op, void *args)
712+
{
713+
return gc_mark_enqueue_buffer(op, (gc_mark_args_t *)args);
714+
}
715+
704716
// Called when we find an object that needs to be marked alive (either from a
705717
// root or from calling tp_traverse).
706718
static int
@@ -986,12 +998,12 @@ update_refs(const mi_heap_t *heap, const mi_heap_area_t *area,
986998
}
987999

9881000
static int
989-
visit_clear_unreachable(PyObject *op, _PyObjectStack *stack)
1001+
visit_clear_unreachable(PyObject *op, void *stack)
9901002
{
9911003
if (gc_is_unreachable(op)) {
9921004
_PyObject_ASSERT(op, _PyObject_GC_IS_TRACKED(op));
9931005
gc_clear_unreachable(op);
994-
return _PyObjectStack_Push(stack, op);
1006+
return _PyObjectStack_Push((_PyObjectStack *)stack, op);
9951007
}
9961008
return 0;
9971009
}
@@ -1003,7 +1015,7 @@ mark_reachable(PyObject *op)
10031015
_PyObjectStack stack = { NULL };
10041016
do {
10051017
traverseproc traverse = Py_TYPE(op)->tp_traverse;
1006-
if (traverse(op, (visitproc)&visit_clear_unreachable, &stack) < 0) {
1018+
if (traverse(op, visit_clear_unreachable, &stack) < 0) {
10071019
_PyObjectStack_Clear(&stack);
10081020
return -1;
10091021
}
@@ -1273,7 +1285,7 @@ gc_propagate_alive_prefetch(gc_mark_args_t *args)
12731285
return -1;
12741286
}
12751287
}
1276-
else if (traverse(op, (visitproc)&gc_mark_enqueue_buffer, args) < 0) {
1288+
else if (traverse(op, gc_mark_enqueue_buffer_visitproc, args) < 0) {
12771289
return -1;
12781290
}
12791291
}
@@ -1294,7 +1306,7 @@ gc_propagate_alive(gc_mark_args_t *args)
12941306
assert(_PyObject_GC_IS_TRACKED(op));
12951307
assert(gc_is_alive(op));
12961308
traverseproc traverse = Py_TYPE(op)->tp_traverse;
1297-
if (traverse(op, (visitproc)&gc_mark_enqueue_no_buffer, args) < 0) {
1309+
if (traverse(op, gc_mark_enqueue_no_buffer_visitproc, args) < 0) {
12981310
return -1;
12991311
}
13001312
}
@@ -1751,9 +1763,7 @@ handle_resurrected_objects(struct collection_state *state)
17511763
op->ob_ref_local -= 1;
17521764

17531765
traverseproc traverse = Py_TYPE(op)->tp_traverse;
1754-
(void) traverse(op,
1755-
(visitproc)visit_decref_unreachable,
1756-
NULL);
1766+
(void)traverse(op, visit_decref_unreachable, NULL);
17571767
}
17581768

17591769
// Find resurrected objects

0 commit comments

Comments
 (0)