OSDN Git Service

pcm: direct: returning semop error code for semaphore up/down failures
authorMounesh Sutar <sutar.mounesh@gmail.com>
Tue, 10 Jan 2017 06:33:17 +0000 (12:03 +0530)
committerTakashi Iwai <tiwai@suse.de>
Tue, 10 Jan 2017 08:20:11 +0000 (09:20 +0100)
Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/pcm/pcm_direct.h

index 91e816c..aee38c5 100644 (file)
@@ -263,7 +263,10 @@ static inline int snd_pcm_direct_semaphore_down(snd_pcm_direct_t *dmix, int sem_
 {
        struct sembuf op[2] = { { sem_num, 0, 0 }, { sem_num, 1, SEM_UNDO } };
        int err = semop(dmix->semid, op, 2);
-       if (err == 0) dmix->locked[sem_num]++;
+       if (err == 0)
+               dmix->locked[sem_num]++;
+       else if (err == -1)
+               err = -errno;
        return err;
 }
 
@@ -271,7 +274,10 @@ static inline int snd_pcm_direct_semaphore_up(snd_pcm_direct_t *dmix, int sem_nu
 {
        struct sembuf op = { sem_num, -1, SEM_UNDO | IPC_NOWAIT };
        int err = semop(dmix->semid, &op, 1);
-       if (err == 0) dmix->locked[sem_num]--;
+       if (err == 0)
+               dmix->locked[sem_num]--;
+       else if (err == -1)
+               err = -errno;
        return err;
 }