From a7b9d617b29a72695a603177c6d51d64a09f71e4 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 5 Aug 2022 19:17:19 +0200 Subject: [PATCH] fix crashes when accessing already closed devices PCM.htimestamp() gets the usual exception emission, Mixer.close() gets a "double invocation" check like PCM.close() has. --- alsaaudio.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/alsaaudio.c b/alsaaudio.c index b930afe..be3c1dc 100644 --- a/alsaaudio.c +++ b/alsaaudio.c @@ -890,6 +890,11 @@ alsapcm_htimestamp(alsapcm_t *self, PyObject *args) snd_pcm_uframes_t avail; PyObject *result = NULL; + if (!self->handle) { + PyErr_SetString(ALSAAudioError, "PCM device is closed"); + return NULL; + } + snd_pcm_htimestamp(self->handle , &avail, &tstamp); result = PyTuple_New(3); @@ -2146,10 +2151,12 @@ alsamixer_close(alsamixer_t *self, PyObject *args) if (!PyArg_ParseTuple(args,":close")) return NULL; - snd_mixer_close(self->handle); - free(self->cardname); - free(self->controlname); - self->handle = 0; + if (self->handle) { + snd_mixer_close(self->handle); + free(self->cardname); + free(self->controlname); + self->handle = 0; + } Py_INCREF(Py_None); return Py_None;