]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Adam Tla/lka <atlka@pg.gda.pl>
authorJaroslav Kysela <perex@perex.cz>
Tue, 20 Jan 2004 12:47:05 +0000 (12:47 +0000)
committerJaroslav Kysela <perex@perex.cz>
Tue, 20 Jan 2004 12:47:05 +0000 (12:47 +0000)
SHM memory leak fix

src/pcm/pcm_mmap.c

index 6d525ebcbcbbfc8952c8d8c71ccc5c3916f9ede3..ba3e7c2a5f8648671a94a029fd9960b514b83f3d 100644 (file)
@@ -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;