[alsa-devel] [PATCH 2/4] src/pcm/pcm_mmap.c: add missing free
From: Julia Lawall julia@diku.dk
Something that is allocated using calloc is not freed on an error path.
Signed-off-by: Julia Lawall julia@diku.dk Signed-off-by: Suman Saha sumsaha@gmail.com
--- Compile-tested only.
src/pcm/pcm_mmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c index 4621fe6..2a009c8 100644 --- a/src/pcm/pcm_mmap.c +++ b/src/pcm/pcm_mmap.c @@ -320,8 +320,11 @@ int snd_pcm_mmap(snd_pcm_t *pcm) snd_pcm_channel_info_t *i = &pcm->mmap_channels[c]; i->channel = c; err = snd_pcm_channel_info(pcm, i); - if (err < 0) + if (err < 0) { + free(pcm->mmap_channels); + pcm->mmap_channels = NULL; return err; + } } for (c = 0; c < pcm->channels; ++c) { snd_pcm_channel_info_t *i = &pcm->mmap_channels[c];
At Sun, 18 Sep 2011 22:04:35 +0200, Julia Lawall wrote:
From: Julia Lawall julia@diku.dk
Something that is allocated using calloc is not freed on an error path.
Signed-off-by: Julia Lawall julia@diku.dk Signed-off-by: Suman Saha sumsaha@gmail.com
Compile-tested only.
src/pcm/pcm_mmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c index 4621fe6..2a009c8 100644 --- a/src/pcm/pcm_mmap.c +++ b/src/pcm/pcm_mmap.c @@ -320,8 +320,11 @@ int snd_pcm_mmap(snd_pcm_t *pcm) snd_pcm_channel_info_t *i = &pcm->mmap_channels[c]; i->channel = c; err = snd_pcm_channel_info(pcm, i);
if (err < 0)
if (err < 0) {
free(pcm->mmap_channels);
pcm->mmap_channels = NULL;
pcm->running_areas should be freed here, too.
thanks,
Takashi
From: Julia Lawall julia@diku.dk
The mmap_channels and running_areas fields are allocated using calloc, but are not freed on an error path.
Signed-off-by: Julia Lawall julia@diku.dk Signed-off-by: Suman Saha sumsaha@gmail.com
--- Compile-tested only.
src/pcm/pcm_mmap.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c index 4621fe6..6b44050 100644 --- a/src/pcm/pcm_mmap.c +++ b/src/pcm/pcm_mmap.c @@ -320,8 +320,13 @@ int snd_pcm_mmap(snd_pcm_t *pcm) snd_pcm_channel_info_t *i = &pcm->mmap_channels[c]; i->channel = c; err = snd_pcm_channel_info(pcm, i); - if (err < 0) + if (err < 0) { + free(pcm->mmap_channels); + free(pcm->running_areas); + pcm->mmap_channels = NULL; + pcm->running_areas = NULL; return err; + } } for (c = 0; c < pcm->channels; ++c) { snd_pcm_channel_info_t *i = &pcm->mmap_channels[c];
At Thu, 22 Sep 2011 13:59:31 +0200 (CEST), Julia Lawall wrote:
From: Julia Lawall julia@diku.dk
The mmap_channels and running_areas fields are allocated using calloc, but are not freed on an error path.
Signed-off-by: Julia Lawall julia@diku.dk Signed-off-by: Suman Saha sumsaha@gmail.com
Thanks for a quick update. Applied now.
Takashi
Compile-tested only.
src/pcm/pcm_mmap.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c index 4621fe6..6b44050 100644 --- a/src/pcm/pcm_mmap.c +++ b/src/pcm/pcm_mmap.c @@ -320,8 +320,13 @@ int snd_pcm_mmap(snd_pcm_t *pcm) snd_pcm_channel_info_t *i = &pcm->mmap_channels[c]; i->channel = c; err = snd_pcm_channel_info(pcm, i);
if (err < 0)
if (err < 0) {
free(pcm->mmap_channels);
free(pcm->running_areas);
pcm->mmap_channels = NULL;
pcm->running_areas = NULL; return err;
} for (c = 0; c < pcm->channels; ++c) { snd_pcm_channel_info_t *i = &pcm->mmap_channels[c];}
participants (2)
-
Julia Lawall
-
Takashi Iwai