diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd/draw/mkfile | 8 | ||||
-rw-r--r-- | src/cmd/draw/stats.c | 23 | ||||
-rw-r--r-- | src/cmd/plumb/fsys.c | 13 |
3 files changed, 31 insertions, 13 deletions
diff --git a/src/cmd/draw/mkfile b/src/cmd/draw/mkfile index a12abd81..bdb33086 100644 --- a/src/cmd/draw/mkfile +++ b/src/cmd/draw/mkfile @@ -5,10 +5,14 @@ SHORTLIB=draw bio 9 <$PLAN9/src/mkmany +$O.tcolors: tcolors.$O + $LD -o $target tcolors.$O -ldraw -lthread -l9 $LDFLAGS + $O.mc: mc.$O - $LD -o $target mc.$O -lfs -lmux -lthread -ldraw -lbio -l9 $LDFLAGS + $LD -o $target mc.$O -lfs -lmux -ldraw -lthread -lbio -l9 $LDFLAGS $O.stats: stats.$O - $LD -o $target stats.$O -lthread -ldraw -lbio -l9 $LDFLAGS + $LD -o $target stats.$O -ldraw -lthread -lbio -l9 $LDFLAGS LDFLAGS=$LDFLAGS -L$X11/lib -lX11 + diff --git a/src/cmd/draw/stats.c b/src/cmd/draw/stats.c index 2f606467..87326cda 100644 --- a/src/cmd/draw/stats.c +++ b/src/cmd/draw/stats.c @@ -666,14 +666,15 @@ keyboardthread(void *v) killall("quit"); } -void machthread(void*); +void machproc(void*); +void updateproc(void*); void threadmain(int argc, char *argv[]) { int i, j; char *s; - ulong v, vmax, nargs; + ulong nargs; char args[100]; nmach = 1; @@ -733,7 +734,7 @@ threadmain(int argc, char *argv[]) } for(i=0; i<nmach; i++) - threadcreate(machthread, &mach[i], STACK); + proccreate(machproc, &mach[i], STACK); for(i=0; i<nargs; i++) switch(args[i]){ @@ -804,10 +805,18 @@ threadmain(int argc, char *argv[]) threadcreate(keyboardthread, nil, XSTACK); threadcreate(mousethread, nil, XSTACK); threadcreate(resizethread, nil, XSTACK); - + proccreate(updateproc, nil, XSTACK); resize(); unlockdisplay(display); +} + +void +updateproc(void *z) +{ + int i; + ulong v, vmax; + USED(z); for(;;){ parity = 1-parity; lockdisplay(display); @@ -821,12 +830,12 @@ threadmain(int argc, char *argv[]) } flushimage(display, 1); unlockdisplay(display); - threadsleep(sleeptime); + sleep(sleeptime); } } void -machthread(void *v) +machproc(void *v) { char buf[256], *f[4], *p; int i, n, t; @@ -835,7 +844,7 @@ machthread(void *v) m = v; t = 0; for(;;){ - n = threadread(m->fd, buf+t, sizeof buf-t); + n = read(m->fd, buf+t, sizeof buf-t); m->dead = 0; if(n <= 0) break; diff --git a/src/cmd/plumb/fsys.c b/src/cmd/plumb/fsys.c index 0ffd5053..e9be1eb6 100644 --- a/src/cmd/plumb/fsys.c +++ b/src/cmd/plumb/fsys.c @@ -199,7 +199,7 @@ startfsys(void) if(post9pservice(p[1], "plumb") < 0) sysfatal("post9pservice plumb: %r"); close(p[1]); - threadcreate(fsysproc, nil, Stack); + proccreate(fsysproc, nil, Stack); } static void @@ -218,14 +218,19 @@ fsysproc(void *v) if(buf == nil) error("malloc failed: %r"); qlock(&readlock); - n = threadread9pmsg(srvfd, buf, messagesize); + n = read9pmsg(srvfd, buf, messagesize); if(n <= 0){ if(n < 0) error("i/o error on server channel"); threadexitsall("unmounted"); } - if(readlock.head == nil) /* no other processes waiting to read; start one */ - threadcreate(fsysproc, nil, Stack); + /* + * can give false positive (create an extra fsysproc) once in a while, + * but no false negatives, so good enough. once we have one extra + * we'll never have more. + */ + if(readlock.waiting.head == nil) /* no other processes waiting to read; start one */ + proccreate(fsysproc, nil, Stack); qunlock(&readlock); if(t == nil) t = emalloc(sizeof(Fcall)); |