tupdate to use new thread library - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f99790979b4a659d7f6e490fbb8b26d630804eed
 (DIR) parent 6a5c5d48705ef8374f5172731408f0f27b0f0dc6
 (HTM) Author: rsc <devnull@localhost>
       Date:   Sun, 26 Dec 2004 02:10:47 +0000
       
       update to use new thread library
       
       Diffstat:
         M src/cmd/draw/mkfile                 |       8 ++++++--
         M src/cmd/draw/stats.c                |      23 ++++++++++++++++-------
         M src/cmd/plumb/fsys.c                |      13 +++++++++----
       
       3 files changed, 31 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/draw/mkfile b/src/cmd/draw/mkfile
       t@@ -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
       +
 (DIR) diff --git a/src/cmd/draw/stats.c b/src/cmd/draw/stats.c
       t@@ -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;
       t@@ -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]){
       t@@ -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);
       t@@ -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;
       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;
 (DIR) diff --git a/src/cmd/plumb/fsys.c b/src/cmd/plumb/fsys.c
       t@@ -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
       t@@ -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));