diff --git a/sys/src/9/port/devdraw.c b/sys/src/9/port/devdraw.c index 017942194..f690c7229 100644 --- a/sys/src/9/port/devdraw.c +++ b/sys/src/9/port/devdraw.c @@ -73,6 +73,7 @@ struct Client CScreen* cscreen; Refresh* refresh; Rendez refrend; + QLock refq; uchar* readdata; int nreaddata; int busy; @@ -1227,11 +1228,18 @@ drawread(Chan *c, void *a, long n, vlong off) 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(); } p = a;