Skip to content

Commit b0d4162

Browse files
committed
fix tp_free() calls, remove wrong PyObject_GC_Del use
Signed-off-by: Jaroslav Kysela <[email protected]>
1 parent 8e98c16 commit b0d4162

File tree

4 files changed

+14
-26
lines changed

4 files changed

+14
-26
lines changed

pyalsa/alsacontrol.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ pyalsacontrol_dealloc(struct pyalsacontrol *self)
158158
{
159159
if (self->handle != NULL)
160160
snd_ctl_close(self->handle);
161+
Py_TYPE(self)->tp_free((PyObject*)self);
161162
}
162163

163164
static PyGetSetDef pyalsacontrol_getseters[] = {
@@ -202,8 +203,6 @@ MOD_INIT(alsacontrol)
202203
PyObject *d, *d1, *l1, *o;
203204
int i;
204205

205-
pyalsacontrol_type.tp_free = PyObject_GC_Del;
206-
207206
if (PyType_Ready(&pyalsacontrol_type) < 0)
208207
return MOD_ERROR_VAL;
209208

pyalsa/alsahcontrol.c

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ pyalsahcontrol_dealloc(struct pyalsahcontrol *self)
397397
{
398398
if (self->handle != NULL)
399399
snd_hctl_close(self->handle);
400+
Py_TYPE(self)->tp_free((PyObject*)self);
400401
}
401402

402403
static PyGetSetDef pyalsahcontrol_getseters[] = {
@@ -620,12 +621,11 @@ static void
620621
pyalsahcontrolelement_dealloc(struct pyalsahcontrolelement *self)
621622
{
622623
if (self->elem) {
623-
Py_XDECREF(self->callback);
624+
Py_DECREF(self->callback);
624625
snd_hctl_elem_set_callback(self->elem, NULL);
625626
}
626-
if (self->pyhandle) {
627-
Py_XDECREF(self->pyhandle);
628-
}
627+
Py_XDECREF(self->pyhandle);
628+
Py_TYPE(self)->tp_free((PyObject*)self);
629629
}
630630

631631
static PyGetSetDef pyalsahcontrolelement_getseters[] = {
@@ -855,9 +855,8 @@ pyalsahcontrolinfo_dealloc(struct pyalsahcontrolinfo *self)
855855
{
856856
if (self->info)
857857
snd_ctl_elem_info_free(self->info);
858-
if (self->pyelem) {
859-
Py_XDECREF(self->pyelem);
860-
}
858+
Py_XDECREF(self->pyelem);
859+
Py_TYPE(self)->tp_free((PyObject*)self);
861860
}
862861

863862
static PyGetSetDef pyalsahcontrolinfo_getseters[] = {
@@ -1289,9 +1288,8 @@ pyalsahcontrolvalue_dealloc(struct pyalsahcontrolvalue *self)
12891288
{
12901289
if (self->value)
12911290
snd_ctl_elem_value_free(self->value);
1292-
if (self->pyelem) {
1293-
Py_XDECREF(self->pyelem);
1294-
}
1291+
Py_XDECREF(self->pyelem);
1292+
Py_TYPE(self)->tp_free((PyObject*)self);
12951293
}
12961294

12971295
static PyGetSetDef pyalsahcontrolvalue_getseters[] = {
@@ -1351,11 +1349,6 @@ MOD_INIT(alsahcontrol)
13511349
PyObject *d, *d1, *l1, *o;
13521350
int i;
13531351

1354-
pyalsahcontrol_type.tp_free = PyObject_GC_Del;
1355-
pyalsahcontrolelement_type.tp_free = PyObject_GC_Del;
1356-
pyalsahcontrolinfo_type.tp_free = PyObject_GC_Del;
1357-
pyalsahcontrolvalue_type.tp_free = PyObject_GC_Del;
1358-
13591352
if (PyType_Ready(&pyalsahcontrol_type) < 0)
13601353
return MOD_ERROR_VAL;
13611354
if (PyType_Ready(&pyalsahcontrolelement_type) < 0)

pyalsa/alsamixer.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ pyalsamixer_dealloc(struct pyalsamixer *self)
255255
{
256256
if (self->handle != NULL)
257257
snd_mixer_close(self->handle);
258+
Py_TYPE(self)->tp_free((PyObject*)self);
258259
}
259260

260261
static PyGetSetDef pyalsamixer_getseters[] = {
@@ -1125,9 +1126,8 @@ pyalsamixerelement_dealloc(struct pyalsamixerelement *self)
11251126
Py_XDECREF(self->callback);
11261127
snd_mixer_elem_set_callback(self->elem, NULL);
11271128
}
1128-
if (self->pyhandle) {
1129-
Py_XDECREF(self->pyhandle);
1130-
}
1129+
Py_XDECREF(self->pyhandle);
1130+
Py_TYPE(self)->tp_free((PyObject*)self);
11311131
}
11321132

11331133
static PyGetSetDef pyalsamixerelement_getseters[] = {
@@ -1210,9 +1210,6 @@ MOD_INIT(alsamixer)
12101210
PyObject *d, *d1, *l1, *o;
12111211
int i;
12121212

1213-
pyalsamixer_type.tp_free = PyObject_GC_Del;
1214-
pyalsamixerelement_type.tp_free = PyObject_GC_Del;
1215-
12161213
if (PyType_Ready(&pyalsamixer_type) < 0)
12171214
return MOD_ERROR_VAL;
12181215
if (PyType_Ready(&pyalsamixerelement_type) < 0)

pyalsa/alsaseq.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,7 @@ static void
711711
SeqEvent_dealloc(SeqEventObject *self) {
712712
FREECHECKED("event", self->event);
713713
FREECHECKED("buff", self->buff);
714+
Py_TYPE(self)->tp_free((PyObject*)self);
714715
}
715716

716717
/** alsaseq.SeqEvent type attribute: __doc__ */
@@ -2099,6 +2100,7 @@ Sequencer_dealloc(SequencerObject *self) {
20992100
snd_seq_close(self->handle);
21002101
self->handle = NULL;
21012102
}
2103+
Py_TYPE(self)->tp_free((PyObject*)self);
21022104
}
21032105

21042106
/** alsaseq.Sequencer name attribute: __doc__ */
@@ -3330,9 +3332,6 @@ MOD_INIT(alsaseq)
33303332
{
33313333
PyObject *module;
33323334

3333-
SeqEventType.tp_free = PyObject_GC_Del;
3334-
SequencerType.tp_free = PyObject_GC_Del;
3335-
33363335
if (PyType_Ready(&ConstantType) < 0)
33373336
return MOD_ERROR_VAL;
33383337

0 commit comments

Comments
 (0)