diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-10 23:10:16 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-10 23:10:16 +0100 |
commit | b4759c21867e844d3007160466e33bfc801671bb (patch) | |
tree | a048318fddfdcf3d0cc8b7789e4a9a693b02df2f /sys/src/cmd/rio/rio.c | |
parent | 681bcfa96897805c8b13c1ad29aa26841d839347 (diff) |
still races, reverting... need a better approach.
Diffstat (limited to 'sys/src/cmd/rio/rio.c')
-rw-r--r-- | sys/src/cmd/rio/rio.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/sys/src/cmd/rio/rio.c b/sys/src/cmd/rio/rio.c index 36aec2d64..8dbbf47be 100644 --- a/sys/src/cmd/rio/rio.c +++ b/sys/src/cmd/rio/rio.c @@ -205,7 +205,7 @@ threadmain(int argc, char *argv[]) exitchan = chancreate(sizeof(int), 0); winclosechan = chancreate(sizeof(Window*), 0); - deletechan = chancreate(sizeof(Wdelmesg), 0); + deletechan = chancreate(sizeof(char*), 0); timerinit(); threadcreate(keyboardthread, nil, STACK); @@ -422,28 +422,30 @@ winclosethread(void*) void deletethread(void*) { - Wdelmesg m; + char *s; + Image *i; threadsetname("deletethread"); for(;;){ - recv(deletechan, &m); - freeimage(m.i); - m.i = namedimage(display, m.s); - if(m.i != nil){ + s = recvp(deletechan); + i = namedimage(display, s); + if(i != nil){ /* move it off-screen to hide it, since client is slow in letting it go */ - originwindow(m.i, m.i->r.min, view->r.max); + originwindow(i, i->r.min, view->r.max); } - freeimage(m.i); - free(m.s); + freeimage(i); + free(s); } } void deletetimeoutproc(void *v) { + char *s; + + s = v; sleep(750); /* remove window from screen after 3/4 of a second */ - send(deletechan, v); - free(v); + sendp(deletechan, s); } /* |