diff --git a/sys/dev/sound/pcm/sound.c b/sys/dev/sound/pcm/sound.c --- a/sys/dev/sound/pcm/sound.c +++ b/sys/dev/sound/pcm/sound.c @@ -300,29 +300,18 @@ if (!PCM_REGISTERED(d)) return (ENODEV); - PCM_LOCK(d); - PCM_WAIT(d); val = (d->flags & SD_F_BITPERFECT) ? 1 : 0; - PCM_ACQUIRE(d); - PCM_UNLOCK(d); - err = sysctl_handle_int(oidp, &val, 0, req); if (err == 0 && req->newptr != NULL) { - if (!(val == 0 || val == 1)) { - PCM_RELEASE_QUICK(d); + if (!(val == 0 || val == 1)) return (EINVAL); - } PCM_LOCK(d); - d->flags &= ~SD_F_BITPERFECT; d->flags |= (val != 0) ? SD_F_BITPERFECT : 0; - - PCM_RELEASE(d); PCM_UNLOCK(d); - } else - PCM_RELEASE_QUICK(d); + } return (err); }