tfix proc leak; add p9usepwlibrary - 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 d93cc14ecee8fbb0dc0fc746713aba7ee0979c4c
 (DIR) parent 00c6cee80a371a38984a44945df40c4136173e81
 (HTM) Author: rsc <devnull@localhost>
       Date:   Mon, 12 Jun 2006 17:20:42 +0000
       
       fix proc leak; add p9usepwlibrary
       
       Diffstat:
         M src/libthread/Linux.c               |       2 +-
         M src/libthread/thread.c              |       9 ++++++++-
       
       2 files changed, 9 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/Linux.c b/src/libthread/Linux.c
       t@@ -378,7 +378,7 @@ myperproc(void)
                                break;
                        }
                }
       -        fprint(2, "myperproc %d: cannot find self\n", pid);
       +        fprint(2, "myperproc %d (%s): cannot find self\n", pid, argv0);
                abort();
                return nil;
        }
 (DIR) diff --git a/src/libthread/thread.c b/src/libthread/thread.c
       t@@ -39,6 +39,11 @@ _threaddebug(char *fmt, ...)
                        snprint(buf, sizeof buf, "/tmp/%s.tlog", p);
                        if((fd = create(buf, OWRITE, 0666)) < 0)
                                fd = open("/dev/null", OWRITE);
       +                if(fd >= 0 && fd != 2){
       +                        dup(fd, 2);
       +                        close(fd);
       +                        fd = 2;
       +                }
                }
        
                va_start(arg, fmt);
       t@@ -331,6 +336,7 @@ Out:
                        threadexitsall(p->msg);
                unlock(&threadnproclock);
                unlock(&p->lock);
       +        _threadsetproc(nil);
                free(p);
        }
        
       t@@ -599,7 +605,7 @@ threadrwakeup(Rendez *r, int all, ulong pc)
        static int threadargc;
        static char **threadargv;
        int mainstacksize;
       -
       +extern int _p9usepwlibrary;        /* getgrgid etc. smash the stack - tell _p9dir just say no */
        static void
        threadmainstart(void *v)
        {
       t@@ -613,6 +619,7 @@ threadmainstart(void *v)
                 * This means the pthread implementation is not suitable for
                 * running under libthread.  Time to write your own.  Sorry.
                 */
       +        _p9usepwlibrary = 0;
                threadmainproc = proc();
                threadmain(threadargc, threadargv);
        }