summaryrefslogtreecommitdiff
path: root/sys/src/9/port/devaudio.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-06-04 00:28:17 +0000
committercinap_lenrek <cinap_lenrek@centraldogma>2011-06-04 00:28:17 +0000
commit15cdb69f61478a7a8133808f198f74ef38f33041 (patch)
tree421f76ddc601ec1b71fee540be47225a86ecefe3 /sys/src/9/port/devaudio.c
parent5a333eb240a9e3622c2f443310a7c1856a6551e8 (diff)
devaudio: serialize calls in devaudio, sb16: remove qlock
Diffstat (limited to 'sys/src/9/port/devaudio.c')
-rw-r--r--sys/src/9/port/devaudio.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/sys/src/9/port/devaudio.c b/sys/src/9/port/devaudio.c
index 5759b08a4..59b4382cd 100644
--- a/sys/src/9/port/devaudio.c
+++ b/sys/src/9/port/devaudio.c
@@ -269,6 +269,11 @@ audiowrite(Chan *c, void *a, long n, vlong off)
if(fn == nil)
error(Egreg);
+ qlock(ac);
+ if(waserror()){
+ qunlock(ac);
+ nexterror();
+ }
switch((ulong)c->qid.path){
case Qaudioctl:
case Qvolume:
@@ -276,20 +281,16 @@ audiowrite(Chan *c, void *a, long n, vlong off)
error(Etoobig);
/* copy data to audiochan buffer so it can be modified */
- qlock(ac);
- if(waserror()){
- qunlock(ac);
- nexterror();
- }
ac->data = nil;
memmove(ac->buf, a, n);
ac->buf[n] = 0;
- n = fn(adev, ac->buf, n, 0);
- qunlock(ac);
- poperror();
- return n;
+ a = ac->buf;
+ off = 0;
}
- return fn(adev, a, n, off);
+ n = fn(adev, a, n, off);
+ qunlock(ac);
+ poperror();
+ return n;
}
static void