ref: e2161c3c4260b8f83e80cb4b6b9fbe139666f66b
parent: 2e4a67560854ff7224ad48bf6b8f41e9e26cf147
author: rodri <rgl@antares-labs.eu>
date: Fri Jan 2 09:22:13 EST 2026
/sys/src/cmd: display locking cleanup remove unnecessary display locking procedures and the ubiquitous display->locking = 1; statement, which is now ignored in libdraw.
--- a/sys/src/cmd/audio/zuke/zuke.c
+++ b/sys/src/cmd/audio/zuke/zuke.c
@@ -312,8 +312,6 @@
w += stringwidth(f, tmp+i);
snprint(tmp+i, sizeof(tmp)-i, "%d%%", volume);
- lockdisplay(display);
-
if(back == nil || Dx(screen->r) != Dx(back->r) || Dy(screen->r) != Dy(back->r)){freeimage(back);
back = allocimage(display, Rpt(ZP,subpt(screen->r.max, screen->r.min)), XRGB32, 0, DNofill);
@@ -455,7 +453,6 @@
opcur = pcur;
flushimage(display, 1);
- unlockdisplay(display);
}
static void
@@ -1359,8 +1356,6 @@
if(initdraw(nil, nil, "zuke") < 0)
sysfatal("initdraw: %r");- unlockdisplay(display);
- display->locking = 1;
f = display->defaultfont;
Scrollwidth = MAX(14, stringwidth(f, "#"));
Scrollheight = MAX(16, f->height);
--- a/sys/src/cmd/camv.c
+++ b/sys/src/cmd/camv.c
@@ -202,11 +202,11 @@
p = divpt(addpt(screen->r.min, screen->r.max), 2);
q = divpt(subpt(i->r.max, i->r.min), 2);
r = (Rectangle){subpt(p, q), addpt(p, q)};- lockdisplay(display);
+ rlockdisplay(display);
draw(disp, r, i, nil, i->r.min);
freeimage(i);
flushimage(display, 1);
- unlockdisplay(display);
+ runlockdisplay(display);
}
fprint(2, "readimage: %r\n");
close(fd);
@@ -234,18 +234,17 @@
if(mc == nil) sysfatal("initmouse: %r");threadcreate(resizethread, nil, mainstacksize);
proccreate(videoproc, nil, mainstacksize);
- display->locking = 1;
flushimage(display, 1);
unlockdisplay(display);
while(recv(mc->c, &mc->Mouse) >= 0){if(mc->buttons == 0)
continue;
- lockdisplay(display);
+ rlockdisplay(display);
if((mc->buttons & 4) != 0)
rmb();
else if((mc->buttons & 2) != 0)
mmb();
flushimage(display, 1);
- unlockdisplay(display);
+ runlockdisplay(display);
}
}
--- a/sys/src/cmd/faces/main.c
+++ b/sys/src/cmd/faces/main.c
@@ -711,7 +711,6 @@
addmaildir(maildir);
init();
unlockdisplay(display); /* initdraw leaves it locked */
- display->locking = 1; /* tell library we're using the display lock */
setdate();
eresized(0);
--- a/sys/src/cmd/fontsel.c
+++ b/sys/src/cmd/fontsel.c
@@ -71,7 +71,6 @@
int i, w, maxw;
char t[256];
- lockdisplay(display);
draw(screen, screen->r, display->white, nil, ZP);
p = screen->r.min;
@@ -105,7 +104,6 @@
string(screen, p, display->black, ZP, font, t);
flushimage(display, 1);
- unlockdisplay(display);
}
static int
@@ -203,7 +201,6 @@
{char t[512];
- lockdisplay(display);
if(f != nil)
freefont(f);
if(cdir->isttf)
@@ -212,7 +209,6 @@
snprint(t, sizeof(t), "%s/%s/%s.font", cdir->prefix, cdir->name, cdir->fonts[cdir->ifont]);
if((f = openfont(display, t)) == nil)
snprint(lasterr, sizeof(lasterr), "%r");
- unlockdisplay(display);
}
static char *
@@ -294,8 +290,6 @@
sysfatal("initmouse: %r");a[Cmouse].c = mctl->c;
a[Cresize].c = mctl->resizec;
- display->locking = 1;
- unlockdisplay(display);
memset(&menu, 0, sizeof(menu));
cdir = &dirs[0];
--- a/sys/src/cmd/ip/gping.c
+++ b/sys/src/cmd/ip/gping.c
@@ -5,6 +5,7 @@
#include <fcall.h>
#include <draw.h>
#include <event.h>
+#include <keyboard.h>
#include <ip.h>
#include "icmp.h"
@@ -828,13 +829,11 @@
void
eresized(int new)
{- lockdisplay(display);
if(new && getwindow(display, Refnone) < 0) {fprint(2, "%s: can't reattach to window\n", argv0);
killall("reattach");}
resize();
- unlockdisplay(display);
}
void
@@ -906,25 +905,6 @@
}
void
-mouseproc(void*)
-{- Mouse mouse;
-
- for(;;){- mouse = emouse();
- if(mouse.buttons == 4){- lockdisplay(display);
- dobutton2(&mouse);
- unlockdisplay(display);
- } else if(mouse.buttons == 1){- lockdisplay(display);
- dobutton1(&mouse);
- unlockdisplay(display);
- }
- }
-}
-
-void
startproc(void (*f)(void*), void *arg)
{int pid;
@@ -944,7 +924,8 @@
void
main(int argc, char *argv[])
{- int i, j;
+ Event e;
+ int i, j, Etimer;
long v, vmax, mark;
char flags[10], *f, *p;
@@ -996,30 +977,38 @@
fprint(2, "%s: initdraw failed: %r\n", argv0);
exits("initdraw");}
- display->locking = 1; /* tell library we're using the display lock */
colinit();
- einit(Emouse);
- startproc(mouseproc, 0);
-
+ einit(Emouse|Ekeyboard);
+ Etimer = etimer(0, pinginterval/nmach);
resize();
starttime = time(0);
+ j = 0;
- unlockdisplay(display); /* display is still locked from initdraw() */
- for(j = 0; ; j++){- lockdisplay(display);
- if(j == nmach){- parity = 1-parity;
- j = 0;
- for(i=0; i<nmach*ngraph; i++){- graph[i].newvalue(graph[i].mach, &v, &vmax, &mark);
- graph[i].update(&graph[i], v, vmax, mark);
+ for(;;)
+ switch(eread(Emouse|Ekeyboard|Etimer, &e)){+ case Emouse:
+ if(e.mouse.buttons == 4)
+ dobutton2(&e.mouse);
+ else if(e.mouse.buttons == 1)
+ dobutton1(&e.mouse);
+ break;
+ case Ekeyboard:
+ if(e.kbdc==Kdel || e.kbdc=='q')
+ killall(nil);
+ break;
+ default: /* Etimer */
+ if(j == nmach){+ parity = 1-parity;
+ j = 0;
+ for(i=0; i<nmach*ngraph; i++){+ graph[i].newvalue(graph[i].mach, &v, &vmax, &mark);
+ graph[i].update(&graph[i], v, vmax, mark);
+ }
+ starttime = time(0);
}
- starttime = time(0);
+ flushimage(display, 1);
+ pingsend(&mach[j%nmach]);
+ j++;
}
- flushimage(display, 1);
- unlockdisplay(display);
- pingsend(&mach[j%nmach]);
- sleep(pinginterval/nmach);
- }
}
--- a/sys/src/cmd/mothra/mothra.c
+++ b/sys/src/cmd/mothra/mothra.c
@@ -279,17 +279,6 @@
esetcursor(0);
}
-void drawlock(int dolock){- static int ref = 0;
- if(dolock){- if(ref++ == 0)
- lockdisplay(display);
- } else {- if(--ref == 0)
- unlockdisplay(display);
- }
-}
-
void scrollto(char *tag);
void search(void);
@@ -341,7 +330,6 @@
}
if(initdraw(0, 0, mothra) < 0)
sysfatal("initdraw: %r");- display->locking = 1;
chrwidth=stringwidth(font, "0");
pltabsize(chrwidth, 8*chrwidth);
einit(Emouse|Ekeyboard);
@@ -362,9 +350,7 @@
bullet=allocimage(display, Rect(0,0,25, 8), screen->chan, 0, DWhite);
fillellipse(bullet, Pt(4,4), 3, 3, display->black, ZP);
mkpanels();
- unlockdisplay(display);
eresized(0);
- drawlock(1);
if(url && url[0])
geturl(url, -1, 1, 0);
@@ -384,9 +370,7 @@
}
}
- drawlock(0);
i=event(&e);
- drawlock(1);
switch(i){case Ekick:
@@ -500,7 +484,6 @@
void eresized(int new){Rectangle r;
- drawlock(1);
if(new && getwindow(display, Refnone) == -1) {fprint(2, "getwindow: %r\n");
exits("getwindow");@@ -511,7 +494,6 @@
pldraw(cmd, screen); /* put cmd box on screen for alt display */
pldraw(root, screen);
flushimage(display, 1);
- drawlock(0);
}
void *emalloc(int n){void *v;
@@ -1054,11 +1036,8 @@
w = www(i = wwwtop++);
if(i >= NWWW){/* wait for the reader to finish the document */
- while(!w->finished && !w->alldone){- drawlock(0);
+ while(!w->finished && !w->alldone)
sleep(10);
- drawlock(1);
- }
freetext(w->text);
freeform(w->form);
freepix(w->pix);
--- a/sys/src/cmd/page.c
+++ b/sys/src/cmd/page.c
@@ -907,11 +907,8 @@
}
if(p->image == nil)
p->open = nil;
- else {- lockdisplay(display);
+ else
imemsize += imagesize(p->image);
- unlockdisplay(display);
- }
}
}
@@ -924,10 +921,8 @@
if(p->open == nil || p->image == nil)
return;
- lockdisplay(display);
imemsize -= imagesize(p->image);
freeimage(p->image);
- unlockdisplay(display);
p->image = nil;
}
@@ -967,9 +962,7 @@
newwin = 0;
resizewin(size);
}
- lockdisplay(display);
drawpage(p);
- unlockdisplay(display);
}
qunlock(p);
next:
@@ -1323,29 +1316,13 @@
nproc++;
}
-/* recursive display lock, called from main proc only */
void
-drawlock(int dolock){- static int ref = 0;
- if(dolock){- if(ref++ == 0)
- lockdisplay(display);
- } else {- if(--ref == 0)
- unlockdisplay(display);
- }
-}
-
-
-void
showpage(Page *p)
{if(p == nil)
return;
- drawlock(0);
unloadpages(imemlimit);
showpage1(p);
- drawlock(1);
}
void
@@ -1356,7 +1333,6 @@
if(p == nil)
return;
- drawlock(0);
qlock(p);
if((fd = openpage(p)) < 0)
goto Out;
@@ -1372,7 +1348,6 @@
close(fd);
Out:
qunlock(p);
- drawlock(1);
}
void
@@ -1388,7 +1363,6 @@
ps = Pt(0, 0);
if(p->image != nil)
ps = addpt(subpt(p->image->r.max, p->image->r.min), Pt(24, 24));
- drawlock(0);
if((fd = p->fd) < 0){if(p->open != popenfile)
return;
@@ -1415,7 +1389,6 @@
exits(0);
}
close(fd);
- drawlock(1);
}
void
@@ -1423,7 +1396,6 @@
{Page *p;
- drawlock(1);
if(new && getwindow(display, Refnone) == -1)
sysfatal("getwindow: %r"); if((p = current) != nil){@@ -1432,7 +1404,6 @@
qunlock(p);
}
}
- drawlock(0);
}
int cohort = -1;
@@ -1472,10 +1443,8 @@
rotate = 0;
Unload:
viewgen++;
- drawlock(0);
unloadpages(0);
showpage1(current);
- drawlock(1);
break;
case Cupsidedown:
rotate += 90;
@@ -1676,8 +1645,6 @@
paper = display->white;
frame = display->black;
ground = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x777777FF);
- display->locking = 1;
- unlockdisplay(display);
einit(Ekeyboard|Emouse);
eplumb(Eplumb, "image");
@@ -1696,11 +1663,8 @@
for(i=0; i<NPROC/4; i++) /* rice */
showpage1(current);
- drawlock(1);
for(;;){- drawlock(0);
i=event(&e);
- drawlock(1);
switch(i){case Emouse:
@@ -1804,9 +1768,7 @@
j = trywalk(s, plumblookup(pm->attr, "addr"));
if(j == nil){current = root;
- drawlock(0);
j = addpage(root, s, popenfile, s, fd);
- drawlock(1);
}
forward = 0;
showpage(j);
--- a/sys/src/cmd/paint.c
+++ b/sys/src/cmd/paint.c
@@ -777,10 +777,8 @@
free(filename);
filename = strdup(s);
Readimage:
- unlockdisplay(display);
- img = readimage(display, fd, 1);
+ img = readimage(display, fd, 0);
close(fd);
- lockdisplay(display);
if(img == nil){ werrstr("readimage: %r");goto Error;
--- a/sys/src/cmd/vnc/vncv.c
+++ b/sys/src/cmd/vnc/vncv.c
@@ -146,7 +146,6 @@
if(initdraw(0, 0, label) < 0)
sysfatal("initdraw: %r");free(label);
- display->locking = 1;
unlockdisplay(display);
choosecolor(vnc);
--
⑨