From b0d416225cb8c2da9fb5dd49ac46996b02f5ddf5 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 27 Mar 2018 14:06:13 +0200 Subject: [PATCH] fix tp_free() calls, remove wrong PyObject_GC_Del use Signed-off-by: Jaroslav Kysela --- pyalsa/alsacontrol.c | 3 +-- pyalsa/alsahcontrol.c | 23 ++++++++--------------- pyalsa/alsamixer.c | 9 +++------ pyalsa/alsaseq.c | 5 ++--- 4 files changed, 14 insertions(+), 26 deletions(-) diff --git a/pyalsa/alsacontrol.c b/pyalsa/alsacontrol.c index d01d32e..59837ec 100644 --- a/pyalsa/alsacontrol.c +++ b/pyalsa/alsacontrol.c @@ -158,6 +158,7 @@ pyalsacontrol_dealloc(struct pyalsacontrol *self) { if (self->handle != NULL) snd_ctl_close(self->handle); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsacontrol_getseters[] = { @@ -202,8 +203,6 @@ MOD_INIT(alsacontrol) PyObject *d, *d1, *l1, *o; int i; - pyalsacontrol_type.tp_free = PyObject_GC_Del; - if (PyType_Ready(&pyalsacontrol_type) < 0) return MOD_ERROR_VAL; diff --git a/pyalsa/alsahcontrol.c b/pyalsa/alsahcontrol.c index cffdc59..ebee1b7 100644 --- a/pyalsa/alsahcontrol.c +++ b/pyalsa/alsahcontrol.c @@ -397,6 +397,7 @@ pyalsahcontrol_dealloc(struct pyalsahcontrol *self) { if (self->handle != NULL) snd_hctl_close(self->handle); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsahcontrol_getseters[] = { @@ -620,12 +621,11 @@ static void pyalsahcontrolelement_dealloc(struct pyalsahcontrolelement *self) { if (self->elem) { - Py_XDECREF(self->callback); + Py_DECREF(self->callback); snd_hctl_elem_set_callback(self->elem, NULL); } - if (self->pyhandle) { - Py_XDECREF(self->pyhandle); - } + Py_XDECREF(self->pyhandle); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsahcontrolelement_getseters[] = { @@ -855,9 +855,8 @@ pyalsahcontrolinfo_dealloc(struct pyalsahcontrolinfo *self) { if (self->info) snd_ctl_elem_info_free(self->info); - if (self->pyelem) { - Py_XDECREF(self->pyelem); - } + Py_XDECREF(self->pyelem); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsahcontrolinfo_getseters[] = { @@ -1289,9 +1288,8 @@ pyalsahcontrolvalue_dealloc(struct pyalsahcontrolvalue *self) { if (self->value) snd_ctl_elem_value_free(self->value); - if (self->pyelem) { - Py_XDECREF(self->pyelem); - } + Py_XDECREF(self->pyelem); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsahcontrolvalue_getseters[] = { @@ -1351,11 +1349,6 @@ MOD_INIT(alsahcontrol) PyObject *d, *d1, *l1, *o; int i; - pyalsahcontrol_type.tp_free = PyObject_GC_Del; - pyalsahcontrolelement_type.tp_free = PyObject_GC_Del; - pyalsahcontrolinfo_type.tp_free = PyObject_GC_Del; - pyalsahcontrolvalue_type.tp_free = PyObject_GC_Del; - if (PyType_Ready(&pyalsahcontrol_type) < 0) return MOD_ERROR_VAL; if (PyType_Ready(&pyalsahcontrolelement_type) < 0) diff --git a/pyalsa/alsamixer.c b/pyalsa/alsamixer.c index 1c06e3f..39d7387 100644 --- a/pyalsa/alsamixer.c +++ b/pyalsa/alsamixer.c @@ -255,6 +255,7 @@ pyalsamixer_dealloc(struct pyalsamixer *self) { if (self->handle != NULL) snd_mixer_close(self->handle); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsamixer_getseters[] = { @@ -1125,9 +1126,8 @@ pyalsamixerelement_dealloc(struct pyalsamixerelement *self) Py_XDECREF(self->callback); snd_mixer_elem_set_callback(self->elem, NULL); } - if (self->pyhandle) { - Py_XDECREF(self->pyhandle); - } + Py_XDECREF(self->pyhandle); + Py_TYPE(self)->tp_free((PyObject*)self); } static PyGetSetDef pyalsamixerelement_getseters[] = { @@ -1210,9 +1210,6 @@ MOD_INIT(alsamixer) PyObject *d, *d1, *l1, *o; int i; - pyalsamixer_type.tp_free = PyObject_GC_Del; - pyalsamixerelement_type.tp_free = PyObject_GC_Del; - if (PyType_Ready(&pyalsamixer_type) < 0) return MOD_ERROR_VAL; if (PyType_Ready(&pyalsamixerelement_type) < 0) diff --git a/pyalsa/alsaseq.c b/pyalsa/alsaseq.c index b58f353..0e7cc35 100644 --- a/pyalsa/alsaseq.c +++ b/pyalsa/alsaseq.c @@ -711,6 +711,7 @@ static void SeqEvent_dealloc(SeqEventObject *self) { FREECHECKED("event", self->event); FREECHECKED("buff", self->buff); + Py_TYPE(self)->tp_free((PyObject*)self); } /** alsaseq.SeqEvent type attribute: __doc__ */ @@ -2099,6 +2100,7 @@ Sequencer_dealloc(SequencerObject *self) { snd_seq_close(self->handle); self->handle = NULL; } + Py_TYPE(self)->tp_free((PyObject*)self); } /** alsaseq.Sequencer name attribute: __doc__ */ @@ -3330,9 +3332,6 @@ MOD_INIT(alsaseq) { PyObject *module; - SeqEventType.tp_free = PyObject_GC_Del; - SequencerType.tp_free = PyObject_GC_Del; - if (PyType_Ready(&ConstantType) < 0) return MOD_ERROR_VAL; -- 2.47.1