DragonFlyBSD Kernel Audit
DF-2011 / fix.diff
← back to finding ↓ download raw
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);