ref: 1696d152714c04e8bcf069f49cc707e2e98dcc64
parent: 0e95b3af5f3ae3419a8a3ee2f88b10e38f0eb734
author: cinap_lenrek <cinap_lenrek@rei2>
date: Mon Feb 20 05:49:14 EST 2012
devdraw: use QLock to serialize sleep on refresh to prevent double sleep
--- a/sys/src/9/port/devdraw.c
+++ b/sys/src/9/port/devdraw.c
@@ -73,6 +73,7 @@
CScreen* cscreen;
Refresh* refresh;
Rendez refrend;
+ QLock refq;
uchar* readdata;
int nreaddata;
int busy;
@@ -1227,10 +1228,17 @@
break;
dunlock();
if(waserror()){- dlock(); /* restore lock for waserror() above */
+ dlock();
nexterror();
}
+ eqlock(&cl->refq);
+ if(waserror()){+ qunlock(&cl->refq);
+ nexterror();
+ }
sleep(&cl->refrend, drawrefactive, cl);
+ poperror();
+ qunlock(&cl->refq);
poperror();
dlock();
}
--
⑨