mirror of
https://github.com/python/cpython.git
synced 2025-08-27 12:16:04 +00:00
gh-132399: fix invalid function signatures on the free-threaded build (#132400)
This commit is contained in:
parent
292a7248cd
commit
a81232c769
2 changed files with 21 additions and 10 deletions
|
@ -2996,8 +2996,9 @@ is_bytecode_unused(_PyCodeArray *tlbc, Py_ssize_t idx,
|
|||
}
|
||||
|
||||
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)) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -3046,7 +3047,7 @@ _Py_ClearUnusedTLBC(PyInterpreterState *interp)
|
|||
}
|
||||
// Collect code objects that have bytecode not in use by any thread
|
||||
_PyGC_VisitObjectsWorldStopped(
|
||||
interp, (gcvisitobjects_t)get_code_with_unused_tlbc, &args);
|
||||
interp, get_code_with_unused_tlbc, &args);
|
||||
if (args.err < 0) {
|
||||
goto err;
|
||||
}
|
||||
|
|
|
@ -688,6 +688,12 @@ gc_mark_enqueue_no_buffer(PyObject *op, gc_mark_args_t *args)
|
|||
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
|
||||
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
|
||||
// root or from calling tp_traverse).
|
||||
static int
|
||||
|
@ -986,12 +998,12 @@ update_refs(const mi_heap_t *heap, const mi_heap_area_t *area,
|
|||
}
|
||||
|
||||
static int
|
||||
visit_clear_unreachable(PyObject *op, _PyObjectStack *stack)
|
||||
visit_clear_unreachable(PyObject *op, void *stack)
|
||||
{
|
||||
if (gc_is_unreachable(op)) {
|
||||
_PyObject_ASSERT(op, _PyObject_GC_IS_TRACKED(op));
|
||||
gc_clear_unreachable(op);
|
||||
return _PyObjectStack_Push(stack, op);
|
||||
return _PyObjectStack_Push((_PyObjectStack *)stack, op);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1003,7 +1015,7 @@ mark_reachable(PyObject *op)
|
|||
_PyObjectStack stack = { NULL };
|
||||
do {
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
|
@ -1273,7 +1285,7 @@ gc_propagate_alive_prefetch(gc_mark_args_t *args)
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
@ -1294,7 +1306,7 @@ gc_propagate_alive(gc_mark_args_t *args)
|
|||
assert(_PyObject_GC_IS_TRACKED(op));
|
||||
assert(gc_is_alive(op));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -1751,9 +1763,7 @@ handle_resurrected_objects(struct collection_state *state)
|
|||
op->ob_ref_local -= 1;
|
||||
|
||||
traverseproc traverse = Py_TYPE(op)->tp_traverse;
|
||||
(void) traverse(op,
|
||||
(visitproc)visit_decref_unreachable,
|
||||
NULL);
|
||||
(void)traverse(op, visit_decref_unreachable, NULL);
|
||||
}
|
||||
|
||||
// Find resurrected objects
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue