From 5b07f6238bcc14a044d7fa4373eda9ce68d05d64 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 20 Feb 2012 10:49:14 +0100 Subject: devdraw: use QLock to serialize sleep on refresh to prevent double sleep --- sys/src/9/port/devdraw.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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; -- cgit v1.2.3