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
--
⑨