From 095159ecd18c645d4dcd72d0924a9c43b982debf Mon Sep 17 00:00:00 2001 From: Cameron Grant Date: Wed, 23 Jan 2002 04:44:03 +0000 Subject: [PATCH] add more error checking to open of /dev/dsp* and /dev/audio* - if the default format for the chosen subdevice cannot be obtained return an error instead of returning success with an indeteterminate format selected. note that this should never happen once the feederchain builder works for recording. --- sys/dev/sound/pcm/dsp.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index 55147e3f525..2f1462cfc5c 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -285,7 +285,15 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td) /* bump refcounts, reset and unlock any channels that we just opened */ if (rdch) { if (flags & FREAD) { - chn_reset(rdch, fmt); + if (chn_reset(rdch, fmt)) { + pcm_lock(d); + pcm_chnrelease(rdch); + if (wrch && (flags & FWRITE)) + pcm_chnrelease(wrch); + pcm_unlock(d); + splx(s); + return ENODEV; + } if (flags & O_NONBLOCK) rdch->flags |= CHN_F_NBIO; } else @@ -296,7 +304,15 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td) } if (wrch) { if (flags & FWRITE) { - chn_reset(wrch, fmt); + if (chn_reset(wrch, fmt)) { + pcm_lock(d); + pcm_chnrelease(wrch); + if (rdch && (flags & FREAD)) + pcm_chnrelease(rdch); + pcm_unlock(d); + splx(s); + return ENODEV; + } if (flags & O_NONBLOCK) wrch->flags |= CHN_F_NBIO; } else -- 2.45.2