diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-06-04 00:28:17 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-06-04 00:28:17 +0000 |
commit | 15cdb69f61478a7a8133808f198f74ef38f33041 (patch) | |
tree | 421f76ddc601ec1b71fee540be47225a86ecefe3 /sys/src/9/port/devaudio.c | |
parent | 5a333eb240a9e3622c2f443310a7c1856a6551e8 (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.c | 21 |
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 |