shithub: riscv

Download patch

ref: f83d4972db310ce49036b4aae5d0c1da22ca95b9
parent: 75edd13d7805b54bbf447022d391ce5141c55d01
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Fri Jun 3 21:04:14 EDT 2011

devaudio: interlock reads too

--- a/sys/src/9/port/devaudio.c
+++ b/sys/src/9/port/devaudio.c
@@ -215,15 +215,15 @@
 	if(fn == nil)
 		error(Egreg);
 
+	qlock(ac);
+	if(waserror()){
+		qunlock(ac);
+		nexterror();
+	}
 	switch((ulong)c->qid.path){
 	case Qaudioctl:
 	case Qaudiostatus:
 	case Qvolume:
-		qlock(ac);
-		if(waserror()){
-			qunlock(ac);
-			nexterror();
-		}
 		/* generate the text on first read */
 		if(ac->data == nil || off == 0){
 			long l;
@@ -237,11 +237,14 @@
 		}
 		/* then serve all requests from buffer */
 		n = readstr(off, a, n, ac->data);
-		qunlock(ac);
-		poperror();
-		return n;
+		break;
+
+	default:
+		n = fn(adev, a, n, off);
 	}
-	return fn(adev, a, n, off);
+	qunlock(ac);
+	poperror();
+	return n;
 }
 
 static long
--