DF-2011 / fix.diff
diff --git a/sys/dev/sound/pci/hdspe.c b/sys/dev/sound/pci/hdspe.c --- a/sys/dev/sound/pci/hdspe.c +++ b/sys/dev/sound/pci/hdspe.c @@ -97,10 +97,12 @@ status = hdspe_read_1(sc, HDSPE_STATUS_REG); if (status & HDSPE_AUDIO_IRQ_PENDING) { - if ((err = device_get_children(sc->dev, &devlist, &devcount)) != 0) - return; - - for (i = 0; i < devcount; i++) { + if ((err = device_get_children(sc->dev, &devlist, &devcount)) != 0) { + snd_mtxunlock(sc->lock); + return; + } + + for (i = 0; i < devcount; i++) { scp = device_get_ivars(devlist[i]); if (scp->ih != NULL) scp->ih(scp); |