diff --git a/pd/src/s_audio_alsa.c b/pd/src/s_audio_alsa.c index 88dc9b74c2a5ec1f4edd73c383db28d992810d08..91fc385fe19b4a07d9c4f8c243650321ab1e2ad7 100644 --- a/pd/src/s_audio_alsa.c +++ b/pd/src/s_audio_alsa.c @@ -839,7 +839,7 @@ void alsa_getdevs(char *indevlist, int *nindevs, while (!snd_card_next(&cardno) && cardno >= 0) { snd_ctl_t *ctl; - snd_ctl_card_info_t *info; + snd_ctl_card_info_t *info = NULL; char devname[80]; const char *desc; if (2 * ndev + 2 > maxndev) @@ -854,7 +854,6 @@ void alsa_getdevs(char *indevlist, int *nindevs, snd_ctl_card_info_malloc(&info); snd_ctl_card_info(ctl, info); desc = snd_ctl_card_info_get_name(info); - //snd_ctl_card_info_free(info); } else { @@ -867,6 +866,11 @@ void alsa_getdevs(char *indevlist, int *nindevs, sprintf(outdevlist + 2*ndev * devdescsize, "%s (hardware)", desc); sprintf(outdevlist + (2*ndev + 1) * devdescsize, "%s (plug-in)", desc); ndev++; + if (info) + { + snd_ctl_card_info_free(info); + info = NULL; + } } for (i = 0, j = 2*ndev; i < alsa_nnames; i++, j++) {