]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fix wrong return values in direct plugins
authorTakashi Iwai <tiwai@suse.de>
Fri, 16 Nov 2007 11:06:43 +0000 (12:06 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 16 Nov 2007 11:06:43 +0000 (12:06 +0100)
Fixed the codes returning error values that are not set properly
via errno.

src/pcm/pcm_direct.c

index d80a41c25ce8abd447c516125c9ca9c0584289da..519ec02ed510ab5f45c8111ea2f3a7fcca563d2f 100644 (file)
@@ -109,13 +109,15 @@ retryget:
        }
        dmix->shmptr = shmat(dmix->shmid, 0, 0);
        if (dmix->shmptr == (void *) -1) {
+               err = -errno;
                snd_pcm_direct_shm_discard(dmix);
-               return -errno;
+               return err;
        }
        mlock(dmix->shmptr, sizeof(snd_pcm_direct_share_t));
        if (shmctl(dmix->shmid, IPC_STAT, &buf) < 0) {
+               err = -errno;
                snd_pcm_direct_shm_discard(dmix);
-               return -errno;
+               return err;
        }
        if (buf.shm_nattch == 1) {      /* we're the first user, clear the segment */
                memset(dmix->shmptr, 0, sizeof(snd_pcm_direct_share_t));
@@ -128,7 +130,7 @@ retryget:
        } else {
                if (dmix->shmptr->magic != SND_PCM_DIRECT_MAGIC) {
                        snd_pcm_direct_shm_discard(dmix);
-                       return -errno;
+                       return -EINVAL;
                }
        }
        return 0;