aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/devdraw/devdraw.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2020-01-12 14:53:46 -0500
committerRuss Cox <rsc@swtch.com>2020-01-13 16:46:14 -0500
commit50923426bf684402160dd7748f14560afd447b73 (patch)
treeddabd607a5936424e70920e4aed7790bec61cca1 /src/cmd/devdraw/devdraw.c
parent892b3c4687eacf6b090bb9a5196ce882e113c423 (diff)
downloadplan9port-50923426bf684402160dd7748f14560afd447b73.tar.gz
plan9port-50923426bf684402160dd7748f14560afd447b73.tar.bz2
plan9port-50923426bf684402160dd7748f14560afd447b73.zip
devdraw: x11 working again
Need to think a bit more about locking, but overall it's a working devdraw. Multiclient mode may not be working but nothing is using it yet.
Diffstat (limited to 'src/cmd/devdraw/devdraw.c')
-rw-r--r--src/cmd/devdraw/devdraw.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/devdraw/devdraw.c b/src/cmd/devdraw/devdraw.c
index e3040779..086574ef 100644
--- a/src/cmd/devdraw/devdraw.c
+++ b/src/cmd/devdraw/devdraw.c
@@ -144,9 +144,11 @@ addflush(Client *c, Rectangle r)
// Unlock drawlk because rpc_flush may want to run on gfx thread,
// and gfx thread might be blocked on drawlk trying to install a new screen
// during a resize.
+ rpc_gfxdrawunlock();
qunlock(&c->drawlk);
rpc_flush(c, fr);
qlock(&c->drawlk);
+ rpc_gfxdrawlock();
}
}
@@ -187,9 +189,11 @@ drawflush(Client *c)
// Unlock drawlk because rpc_flush may want to run on gfx thread,
// and gfx thread might be blocked on drawlk trying to install a new screen
// during a resize.
+ rpc_gfxdrawunlock();
qunlock(&c->drawlk);
rpc_flush(c, r);
qlock(&c->drawlk);
+ rpc_gfxdrawlock();
}
}
@@ -656,6 +660,7 @@ draw_datawrite(Client *client, void *v, int n)
Refx *refx;
qlock(&client->drawlk);
+ rpc_gfxdrawlock();
a = v;
m = 0;
oldn = n;
@@ -1428,6 +1433,7 @@ draw_datawrite(Client *client, void *v, int n)
continue;
}
}
+ rpc_gfxdrawunlock();
qunlock(&client->drawlk);
return oldn - n;
@@ -1498,6 +1504,7 @@ Ebadarg:
error:
werrstr("%s", err);
+ rpc_gfxdrawunlock();
qunlock(&client->drawlk);
return -1;
}