tMore little bug fixes - 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 f1bfc54e12efe488e355debf696dbd999c62fe07
 (DIR) parent 1a8f27c35024af7b4ed857a388d20f0a4a560db0
 (HTM) Author: rsc <devnull@localhost>
       Date:   Fri, 14 May 2004 17:45:39 +0000
       
       More little bug fixes
       
       Diffstat:
         M plumb/basic                         |       2 +-
         M rcmain                              |       6 +++---
         M src/cmd/mk/unix.c                   |       8 ++++++++
         M src/cmd/mkfile                      |       2 +-
         M src/cmd/rc/plan9ish.c               |       1 -
         M src/lib9/9proc.h                    |       2 ++
         M src/lib9/_p9proc.c                  |      13 +++++++++++++
         M src/lib9/fork.c                     |       1 +
         M src/libthread/exit.c                |       3 ++-
       
       9 files changed, 31 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/plumb/basic b/plumb/basic
       t@@ -38,7 +38,7 @@ data matches '[a-zA-Z¡-￿0-9_\-./]+'
        data matches '([a-zA-Z¡-￿0-9_\-./]+)\.(jpe?g|JPE?G|gif|GIF|tiff?|TIFF?|ppm|bit|png|PNG)'
        arg isfile        $0
        plumb to image
       -plumb start qiv -t $0
       +plumb start qiv -t $file
        
        # postscript/pdf/dvi go to page but not over the a plumb port
        # the port is here for reference but is unused
 (DIR) diff --git a/rcmain b/rcmain
       t@@ -10,7 +10,7 @@ case 1
                prompt=($prompt '        ')
        }
        if(~ $rcname ?.out ?.rc */?.rc */?.out) prompt=('broken! ' '        ')
       -if(flag p) path=(/bin)
       +if(flag p) path=(/bin /usr/bin)
        if not{
                finit
                if(~ $#path 0) {
       t@@ -28,9 +28,9 @@ if(! ~ $#cflag 0){
        if not if(flag i){
                if(~ $TERM 9term){
                        if(~ $#'fn#cd' 0)
       -                        fn cd { builtin cd $1 && label `{pwd} }
       +                        fn cd { builtin cd $1 && flag i && awd }
                }
       -        if(flag l && /bin/test -r $home/lib/profile) . $home/lib/profile
       +        if(flag l && test -r $home/lib/profile) . $home/lib/profile
                status=''
                if(! ~ $#* 0) . $*
                . -i '/dev/stdin'
 (DIR) diff --git a/src/cmd/mk/unix.c b/src/cmd/mk/unix.c
       t@@ -23,12 +23,20 @@ readenv(void)
                Word *w;
        
                for(p = environ; *p; p++){
       +/* rsc 5/5/2004 -- This misparses fn#cd={whatever} 
                        s = shname(*p);
                        if(*s == '=') {
                                *s = 0;
                                w = newword(s+1);
                        } else
                                w = newword("");
       +*/
       +                s = strchr(*p, '=');
       +                if(s){
       +                        *s = 0;
       +                        w = newword(s+1);
       +                } else
       +                        w = newword("");
                        if (symlook(*p, S_INTERNAL, 0))
                                continue;
                        s = strdup(*p);
 (DIR) diff --git a/src/cmd/mkfile b/src/cmd/mkfile
       t@@ -5,7 +5,7 @@ SHORTLIB=sec fs mux regexp9 thread bio 9
        
        <$PLAN9/src/mkmany
        
       -BUGGERED='CVS|faces|factotum|mailfs|scat|upas|vac|venti|lex'
       +BUGGERED='CVS|faces|factotum|mailfs|scat|upas|vac|venti|lex|vncv'
        DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "^($BUGGERED)$"`
        
        <$PLAN9/src/mkdirs
 (DIR) diff --git a/src/cmd/rc/plan9ish.c b/src/cmd/rc/plan9ish.c
       t@@ -34,7 +34,6 @@ char Fdprefix[]="/dev/fd/";
        void execfinit(void);
        void execbind(void);
        void execmount(void);
       -void execnewpgrp(void);
        builtin Builtin[]={
                "cd",                execcd,
                "whatis",        execwhatis,
 (DIR) diff --git a/src/lib9/9proc.h b/src/lib9/9proc.h
       t@@ -18,3 +18,5 @@ struct Uproc
        
        extern Uproc *_p9uproc(int);
        extern void _p9uprocdie(void);
       +extern void _clearuproc(void);
       +
 (DIR) diff --git a/src/lib9/_p9proc.c b/src/lib9/_p9proc.c
       t@@ -18,6 +18,19 @@ static Uproc *alluproc[PIDHASH];
        static int allupid[PIDHASH];
        static Lock uproclock;
        
       +void
       +_clearuproc(void)
       +{
       +        int i;
       +
       +        /* called right after fork - no locking needed */
       +        for(i=0; i<PIDHASH; i++)
       +                if(alluproc[i] != T && alluproc[i] != 0)
       +                        free(alluproc[i]);
       +        memset(alluproc, 0, sizeof alluproc);
       +        memset(allupid, 0, sizeof allupid);
       +}
       +                
        Uproc*
        _p9uproc(int inhandler)
        {
 (DIR) diff --git a/src/lib9/fork.c b/src/lib9/fork.c
       t@@ -9,6 +9,7 @@ p9fork(void)
                int pid;
        
                pid = fork();
       +        _clearuproc();
                _p9uproc(0);
                return pid;
        }
 (DIR) diff --git a/src/libthread/exit.c b/src/libthread/exit.c
       t@@ -55,8 +55,9 @@ threadexitsall(char *exitstr)
                        _threaddebug(DBGSCHED, "threadexitsall kill %d", pid[i]);
                        if(pid[i]==0 || pid[i]==-1)
                                fprint(2, "bad pid in threadexitsall: %d\n", pid[i]);
       -                else if(pid[i] != mypid)
       +                else if(pid[i] != mypid){
                                kill(pid[i], SIGTERM);
       +                }
                }
        
                /* leave */