Commit 5f508702 authored by Eric Wong's avatar Eric Wong

alsa: fix memory leaks from snd_*_open*()

ALSA uses a global config structure that's overwritten (and not free'd) every time one of those functions is called, so we have to manually call snd_config_update_free_global() to release it. Hint taken from MEMORY-LEAK in the ALSA source code git-svn-id: https://svn.musicpd.org/mpd/trunk@4381 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent 368034e1
...@@ -106,6 +106,7 @@ static int alsa_testDefault(void) ...@@ -106,6 +106,7 @@ static int alsa_testDefault(void)
int ret = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, int ret = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK,
SND_PCM_NONBLOCK); SND_PCM_NONBLOCK);
snd_config_update_free_global();
if(ret) { if(ret) {
WARNING("Error opening default alsa device: %s\n", WARNING("Error opening default alsa device: %s\n",
...@@ -152,6 +153,7 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -152,6 +153,7 @@ static int alsa_openDevice(AudioOutput * audioOutput)
err = snd_pcm_open(&ad->pcmHandle, ad->device, err = snd_pcm_open(&ad->pcmHandle, ad->device,
SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
snd_config_update_free_global();
if(err < 0) { if(err < 0) {
ad->pcmHandle = NULL; ad->pcmHandle = NULL;
goto error; goto error;
......
...@@ -214,7 +214,9 @@ static int prepAlsaMixer(char * card) { ...@@ -214,7 +214,9 @@ static int prepAlsaMixer(char * card) {
char * controlName = VOLUME_MIXER_ALSA_CONTROL_DEFAULT; char * controlName = VOLUME_MIXER_ALSA_CONTROL_DEFAULT;
ConfigParam * param; ConfigParam * param;
if((err = snd_mixer_open(&volume_alsaMixerHandle,0))<0) { err = snd_mixer_open(&volume_alsaMixerHandle,0);
snd_config_update_free_global();
if (err < 0) {
WARNING("problems opening alsa mixer: %s\n",snd_strerror(err)); WARNING("problems opening alsa mixer: %s\n",snd_strerror(err));
return -1; return -1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment