diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c index aee8db802d8c3f..4233ac5736c61e 100644 --- a/Modules/_queuemodule.c +++ b/Modules/_queuemodule.c @@ -197,6 +197,8 @@ typedef struct { PyObject *weakreflist; } simplequeueobject; +#define simplequeueobject_CAST(op) ((simplequeueobject *)(op)) + /*[clinic input] module _queue class _queue.SimpleQueue "simplequeueobject *" "simplequeue_get_state_by_type(type)->SimpleQueueType" @@ -204,28 +206,32 @@ class _queue.SimpleQueue "simplequeueobject *" "simplequeue_get_state_by_type(ty /*[clinic end generated code: output=da39a3ee5e6b4b0d input=0a4023fe4d198c8d]*/ static int -simplequeue_clear(simplequeueobject *self) +simplequeue_clear(PyObject *op) { + simplequeueobject *self = simplequeueobject_CAST(op); RingBuf_Fini(&self->buf); return 0; } static void -simplequeue_dealloc(simplequeueobject *self) +simplequeue_dealloc(PyObject *op) { + simplequeueobject *self = simplequeueobject_CAST(op); PyTypeObject *tp = Py_TYPE(self); PyObject_GC_UnTrack(self); - (void)simplequeue_clear(self); - if (self->weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) self); - Py_TYPE(self)->tp_free(self); + (void)simplequeue_clear(op); + if (self->weakreflist != NULL) { + PyObject_ClearWeakRefs(op); + } + tp->tp_free(self); Py_DECREF(tp); } static int -simplequeue_traverse(simplequeueobject *self, visitproc visit, void *arg) +simplequeue_traverse(PyObject *op, visitproc visit, void *arg) { + simplequeueobject *self = simplequeueobject_CAST(op); RingBuf *buf = &self->buf; for (Py_ssize_t i = 0, num_items = buf->num_items; i < num_items; i++) { Py_VISIT(RingBuf_At(buf, i)); @@ -514,7 +520,7 @@ queue_clear(PyObject *m) static void queue_free(void *m) { - queue_clear((PyObject *)m); + (void)queue_clear((PyObject *)m); } #include "clinic/_queuemodule.c.h"