gh-132399: fix invalid function signatures on the free-threaded build (#132400)

This commit is contained in:
Bénédikt Tran 2025-04-12 09:46:33 +02:00 committed by GitHub
parent 292a7248cd
commit a81232c769
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 10 deletions

View file

@ -2996,8 +2996,9 @@ is_bytecode_unused(_PyCodeArray *tlbc, Py_ssize_t idx,
} }
static int static int
get_code_with_unused_tlbc(PyObject *obj, struct get_code_args *args) get_code_with_unused_tlbc(PyObject *obj, void *data)
{ {
struct get_code_args *args = (struct get_code_args *) data;
if (!PyCode_Check(obj)) { if (!PyCode_Check(obj)) {
return 1; return 1;
} }
@ -3046,7 +3047,7 @@ _Py_ClearUnusedTLBC(PyInterpreterState *interp)
} }
// Collect code objects that have bytecode not in use by any thread // Collect code objects that have bytecode not in use by any thread
_PyGC_VisitObjectsWorldStopped( _PyGC_VisitObjectsWorldStopped(
interp, (gcvisitobjects_t)get_code_with_unused_tlbc, &args); interp, get_code_with_unused_tlbc, &args);
if (args.err < 0) { if (args.err < 0) {
goto err; goto err;
} }

View file

@ -688,6 +688,12 @@ gc_mark_enqueue_no_buffer(PyObject *op, gc_mark_args_t *args)
return 0; return 0;
} }
static inline int
gc_mark_enqueue_no_buffer_visitproc(PyObject *op, void *args)
{
return gc_mark_enqueue_no_buffer(op, (gc_mark_args_t *)args);
}
static int static int
gc_mark_enqueue_buffer(PyObject *op, gc_mark_args_t *args) gc_mark_enqueue_buffer(PyObject *op, gc_mark_args_t *args)
{ {
@ -701,6 +707,12 @@ gc_mark_enqueue_buffer(PyObject *op, gc_mark_args_t *args)
} }
} }
static inline int
gc_mark_enqueue_buffer_visitproc(PyObject *op, void *args)
{
return gc_mark_enqueue_buffer(op, (gc_mark_args_t *)args);
}
// Called when we find an object that needs to be marked alive (either from a // Called when we find an object that needs to be marked alive (either from a
// root or from calling tp_traverse). // root or from calling tp_traverse).
static int static int
@ -986,12 +998,12 @@ update_refs(const mi_heap_t *heap, const mi_heap_area_t *area,
} }
static int static int
visit_clear_unreachable(PyObject *op, _PyObjectStack *stack) visit_clear_unreachable(PyObject *op, void *stack)
{ {
if (gc_is_unreachable(op)) { if (gc_is_unreachable(op)) {
_PyObject_ASSERT(op, _PyObject_GC_IS_TRACKED(op)); _PyObject_ASSERT(op, _PyObject_GC_IS_TRACKED(op));
gc_clear_unreachable(op); gc_clear_unreachable(op);
return _PyObjectStack_Push(stack, op); return _PyObjectStack_Push((_PyObjectStack *)stack, op);
} }
return 0; return 0;
} }
@ -1003,7 +1015,7 @@ mark_reachable(PyObject *op)
_PyObjectStack stack = { NULL }; _PyObjectStack stack = { NULL };
do { do {
traverseproc traverse = Py_TYPE(op)->tp_traverse; traverseproc traverse = Py_TYPE(op)->tp_traverse;
if (traverse(op, (visitproc)&visit_clear_unreachable, &stack) < 0) { if (traverse(op, visit_clear_unreachable, &stack) < 0) {
_PyObjectStack_Clear(&stack); _PyObjectStack_Clear(&stack);
return -1; return -1;
} }
@ -1273,7 +1285,7 @@ gc_propagate_alive_prefetch(gc_mark_args_t *args)
return -1; return -1;
} }
} }
else if (traverse(op, (visitproc)&gc_mark_enqueue_buffer, args) < 0) { else if (traverse(op, gc_mark_enqueue_buffer_visitproc, args) < 0) {
return -1; return -1;
} }
} }
@ -1294,7 +1306,7 @@ gc_propagate_alive(gc_mark_args_t *args)
assert(_PyObject_GC_IS_TRACKED(op)); assert(_PyObject_GC_IS_TRACKED(op));
assert(gc_is_alive(op)); assert(gc_is_alive(op));
traverseproc traverse = Py_TYPE(op)->tp_traverse; traverseproc traverse = Py_TYPE(op)->tp_traverse;
if (traverse(op, (visitproc)&gc_mark_enqueue_no_buffer, args) < 0) { if (traverse(op, gc_mark_enqueue_no_buffer_visitproc, args) < 0) {
return -1; return -1;
} }
} }
@ -1751,9 +1763,7 @@ handle_resurrected_objects(struct collection_state *state)
op->ob_ref_local -= 1; op->ob_ref_local -= 1;
traverseproc traverse = Py_TYPE(op)->tp_traverse; traverseproc traverse = Py_TYPE(op)->tp_traverse;
(void) traverse(op, (void)traverse(op, visit_decref_unreachable, NULL);
(visitproc)visit_decref_unreachable,
NULL);
} }
// Find resurrected objects // Find resurrected objects