diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -260,6 +260,12 @@ PCM_LOCK(d); PCM_WAIT(d); PCM_ACQUIRE(d); + if (!DSP_REGISTERED(d)) { + PCM_RELEASE(d); + PCM_UNLOCK(d); + PCM_GIANT_EXIT(d); + goto skip; + } rdch = priv->rdch; wrch = priv->wrch; diff --git a/tests/sys/sound/hotunload.sh b/tests/sys/sound/hotunload.sh --- a/tests/sys/sound/hotunload.sh +++ b/tests/sys/sound/hotunload.sh @@ -41,6 +41,7 @@ cat /dev/random >/dev/dsp.dummy & cat /dev/dsp.dummy >/dev/null & done + killall cat kldunload -n snd_dummy } hotunload_cleanup()