Index: src/sys/dev/sound/pcm/mixer.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pcm/mixer.c,v retrieving revision 1.43.2.3 diff -u -r1.43.2.3 mixer.c --- src/sys/dev/sound/pcm/mixer.c 30 Dec 2005 19:55:54 -0000 1.43.2.3 +++ src/sys/dev/sound/pcm/mixer.c 4 Apr 2006 14:59:49 -0000 @@ -269,10 +269,14 @@ mixer_uninit(device_t dev) { int i; + struct snddev_info *d; struct snd_mixer *m; struct cdev *pdev; + d = device_get_softc(dev); pdev = mixer_get_devt(dev); + if (d == NULL || pdev == NULL || pdev->si_drv1 == NULL) + return EBADF; m = pdev->si_drv1; snd_mtxlock(m->lock); @@ -294,6 +298,8 @@ snd_mtxfree(m->lock); kobj_delete((kobj_t)m, M_MIXER); + d->mixer_dev = NULL; + return 0; } @@ -465,10 +471,16 @@ int v = -1, j = cmd & 0xff; m = i_dev->si_drv1; - if (mode != -1 && !m->busy) + + if (m == NULL) return EBADF; snd_mtxlock(m->lock); + if (mode != -1 && !m->busy) { + snd_mtxunlock(m->lock); + return EBADF; + } + if ((cmd & MIXER_WRITE(0)) == MIXER_WRITE(0)) { if (j == SOUND_MIXER_RECSRC) ret = mixer_setrecsrc(m, *arg_i);