From: Jaroslav Kysela Date: Tue, 20 Jan 2004 12:47:05 +0000 (+0000) Subject: Adam Tla/lka X-Git-Tag: v1.0.3~46 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=852b0c61297fa9729c4d7deb23a2ca3564844dc5;p=alsa-lib.git Adam Tla/lka SHM memory leak fix --- diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c index 6d525ebc..ba3e7c2a 100644 --- a/src/pcm/pcm_mmap.c +++ b/src/pcm/pcm_mmap.c @@ -462,11 +462,16 @@ int snd_pcm_munmap(snd_pcm_t *pcm) if (i->u.shm.area) { snd_shm_area_destroy(i->u.shm.area); i->u.shm.area = NULL; - } else { - err = shmdt(i->addr); - if (err < 0) { - SYSERR("shmdt failed"); - return -errno; + if (pcm->access == SND_PCM_ACCESS_MMAP_INTERLEAVED || + pcm->access == SND_PCM_ACCESS_RW_INTERLEAVED) { + unsigned int c1; + for (c1 = c + 1; c1 < pcm->channels; c1++) { + snd_pcm_channel_info_t *i1 = &pcm->mmap_channels[c1]; + if (i1->u.shm.area) { + snd_shm_area_destroy(i1->u.shm.area); + i1->u.shm.area = NULL; + } + } } } break;