tchange 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 334cb1e91ceb2d667c1cfd0b71aa9801bef089ec
 (DIR) parent 0a839b83142bba3205fdd5e30d2ba3514aa4513b
 (HTM) Author: rsc <devnull@localhost>
       Date:   Mon, 27 Dec 2004 00:38:59 +0000
       
       change to use new thread library
       
       Diffstat:
         M src/cmd/acme/acme.c                 |      51 +++++++++++++++++++------------
         M src/cmd/acme/edit.c                 |       1 +
         M src/cmd/acme/exec.c                 |       1 +
         M src/cmd/acme/fsys.c                 |       4 ++--
         M src/cmd/acme/look.c                 |       1 +
         M src/cmd/acme/regx.c                 |       1 +
         M src/cmd/acme/time.c                 |       6 ++++--
       
       7 files changed, 41 insertions(+), 24 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
       t@@ -41,6 +41,7 @@ char                *fontnames[2] =
        
        Command *command;
        
       +void        shutdownthread(void*);
        void        acmeerrorinit(void);
        void        readfile(Column*, char*);
        static int        shutdown(void*, char*);
       t@@ -167,14 +168,23 @@ threadmain(int argc, char *argv[])
        
                cwait = threadwaitchan();
                ccommand = chancreate(sizeof(Command**), 0);
       +        chansetname(ccommand, "ccommand");
                ckill = chancreate(sizeof(Rune*), 0);
       +        chansetname(ckill, "ckill");
                cxfidalloc = chancreate(sizeof(Xfid*), 0);
       +        chansetname(cxfidalloc, "cxfidalloc");
                cxfidfree = chancreate(sizeof(Xfid*), 0);
       +        chansetname(cxfidfree, "cxfidfree");
                cnewwindow = chancreate(sizeof(Channel*), 0);
       +        chansetname(cnewwindow, "cnewwindow");
                cerr = chancreate(sizeof(char*), 0);
       +        chansetname(cerr, "cerr");
                cedit = chancreate(sizeof(int), 0);
       +        chansetname(cedit, "cedit");
                cexit = chancreate(sizeof(int), 0);
       +        chansetname(cexit, "cexit");
                cwarn = chancreate(sizeof(void*), 1);
       +        chansetname(cwarn, "cwarn");
                if(cwait==nil || ccommand==nil || ckill==nil || cxfidalloc==nil || cxfidfree==nil || cerr==nil || cexit==nil || cwarn==nil){
                        fprint(2, "acme: can't create initial channels: %r\n");
                        exits("channels");
       t@@ -248,8 +258,8 @@ threadmain(int argc, char *argv[])
                threadcreate(waitthread, nil, STACK);
                threadcreate(xfidallocthread, nil, STACK);
                threadcreate(newwindowthread, nil, STACK);
       -
       -        threadnotify(shutdown, 1);
       +/*        threadcreate(shutdownthread, nil, STACK); */
       +/*        threadnotify(shutdown, 1); */
                recvul(cexit);
                killprocs();
                threadexitsall(nil);
       t@@ -307,6 +317,21 @@ shutdown(void *v, char *msg)
                return 0;
        }
        
       +/*
       +void
       +shutdownthread(void *v)
       +{
       +        char *msg;
       +        Channel *c;
       +
       +        USED(v);
       +
       +        c = threadnotechan();
       +        while((msg = recvp(c)) != nil)
       +                shutdown(nil, msg);
       +}
       +*/
       +
        void
        killprocs(void)
        {
       t@@ -332,7 +357,7 @@ acmeerrorproc(void *v)
                USED(v);
                threadsetname("acmeerrorproc");
                buf = emalloc(8192+1);
       -        while((n=threadread(errorfd, buf, 8192)) >= 0){
       +        while((n=read(errorfd, buf, 8192)) >= 0){
                        buf[n] = '\0';
                        sendp(cerr, estrdup(buf));
                }
       t@@ -367,7 +392,7 @@ acmeerrorinit(void)
                errorfd = pfd[1];
                if(errorfd < 0)
                        error("can't re-open acmeerror file");
       -        threadcreate(acmeerrorproc, nil, STACK);
       +        proccreate(acmeerrorproc, nil, STACK);
        }
        
        /*
       t@@ -648,21 +673,6 @@ waitthread(void *v)
                alts[WCmd].op = CHANRCV;
                alts[NWALT].op = CHANEND;
        
       -        /*
       -         * BUG.  Actually there's no bug here but this is the
       -         * first place you'd look.  When a program is run,
       -         * it doesn't disappear from the main tag until the
       -         * mouse is moved or keyboard is hit.  This would
       -         * suggest that the WWait case isn't working right,
       -         * but what's actually going on is that the X11 code
       -         * is running a select-based threading loop that
       -         * doesn't get interrupted until there is data from X11.
       -         * This was done to make acme work on Suns and
       -         * other systems where our threading was sub-par.
       -         * Now that we've gotten pthreads working (sort of),
       -         * we might be able to fix this properly.
       -         * But the bug is in libdraw and libthread, not here.
       -         */
                command = nil;
                for(;;){
                        switch(alt(alts)){
       t@@ -719,7 +729,7 @@ waitthread(void *v)
                                                textsetselect(t, 0, 0);
                                        }
                                        if(w->msg[0])
       -                                        warning(c->md, "%S: %s\n", c->name, w->msg);
       +                                        warning(c->md, "%.*S: exit %s\n", c->nname-1, c->name, w->msg);
                                        flushimage(display, 1);
                                }
                                qunlock(&row.lk);
       t@@ -791,6 +801,7 @@ xfidallocthread(void *v)
                                else{
                                        x = emalloc(sizeof(Xfid));
                                        x->c = chancreate(sizeof(void(*)(Xfid*)), 0);
       +                                chansetname(x->c, "xc%p", x->c);
                                        x->arg = x;
                                        threadcreate(xfidctl, x->arg, STACK);
                                }
 (DIR) diff --git a/src/cmd/acme/edit.c b/src/cmd/acme/edit.c
       t@@ -178,6 +178,7 @@ editcmd(Text *ct, Rune *r, uint n)
                resetxec();
                if(editerrc == nil){
                        editerrc = chancreate(sizeof(char*), 0);
       +                chansetname(editerrc, "editerrc");
                        lastpat = allocstring(0);
                }
                threadcreate(editthread, nil, STACK);
 (DIR) diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
       t@@ -1585,6 +1585,7 @@ run(Window *win, char *s, Rune *rdir, int ndir, int newns, char *argaddr, char *
                arg = emalloc(10*sizeof(void*));
                c = emalloc(sizeof *c);
                cpid = chancreate(sizeof(ulong), 0);
       +        chansetname(cpid, "cpid %s", s);
                arg[0] = win;
                arg[1] = s;
                arg[2] = rdir;
 (DIR) diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c
       t@@ -126,7 +126,7 @@ fsysinit(void)
                fmtinstall('F', fcallfmt);
                if((u = getuser()) != nil)
                        user = estrdup(u);
       -        threadcreate(fsysproc, nil, STACK);
       +        proccreate(fsysproc, nil, STACK);
        }
        
        void
       t@@ -142,7 +142,7 @@ fsysproc(void *v)
                x = nil;
                for(;;){
                        buf = emalloc(messagesize+UTFmax);        /* overflow for appending partial rune in xfidwrite */
       -                n = threadread9pmsg(sfd, buf, messagesize);
       +                n = read9pmsg(sfd, buf, messagesize);
                        if(n <= 0){
                                if(closing)
                                        break;
 (DIR) diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
       t@@ -45,6 +45,7 @@ startplumbing(void)
                        fprint(2, "acme: can't initialize plumber: %r\n");
                else{
                        cplumb = chancreate(sizeof(Plumbmsg*), 0);
       +                chansetname(cplumb, "cplumb");
                        threadcreate(plumbproc, nil, STACK);
                }
                plumbsendfid = plumbopenfid("send", OWRITE|OCEXEC);
 (DIR) diff --git a/src/cmd/acme/regx.c b/src/cmd/acme/regx.c
       t@@ -128,6 +128,7 @@ void
        rxinit(void)
        {
                rechan = chancreate(sizeof(Inst*), 0);
       +        chansetname(rechan, "rechan");
                lastregexp = runemalloc(1);
        }
        
 (DIR) diff --git a/src/cmd/acme/time.c b/src/cmd/acme/time.c
       t@@ -50,7 +50,7 @@ timerproc(void *v)
                nt = 0;
                old = msec();
                for(;;){
       -                threadsleep(1);        /* will sleep minimum incr */
       +                sleep(1);        /* will sleep minimum incr */
                        new = msec();
                        dt = new-old;
                        old = new;
       t@@ -98,7 +98,8 @@ void
        timerinit(void)
        {
                ctimer = chancreate(sizeof(Timer*), 100);
       -        threadcreate(timerproc, nil, STACK);
       +        chansetname(ctimer, "ctimer");
       +        proccreate(timerproc, nil, STACK);
        }
        
        Timer*
       t@@ -112,6 +113,7 @@ timerstart(int dt)
                else{
                        t = emalloc(sizeof(Timer));
                        t->c = chancreate(sizeof(int), 0);
       +                chansetname(t->c, "tc%p", t->c);
                }
                t->next = nil;
                t->dt = dt;