gh-111178: fix UBSan failures in Modules/_queuemodule.c
(GH-129790)
Fix UBSan failures for `simplequeueobject` Suppress unused return values
This commit is contained in:
parent
4f07fd59cb
commit
55f8bac208
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user