aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/gc_free_threading.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c
index 4c459b02ce2..fa4cb56f01e 100644
--- a/Python/gc_free_threading.c
+++ b/Python/gc_free_threading.c
@@ -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