tparanoia - 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 37cc72d323478b1d98ee741e3d88557d141e7767
 (DIR) parent e9dbe11dbf43197892680f3b5084cd12b6dc198b
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 11 Jan 2005 21:28:00 +0000
       
       paranoia
       
       Diffstat:
         M src/libthread/daemonize.c           |      10 +++++++++-
         M src/libthread/thread.c              |       9 ++++++++-
       
       2 files changed, 17 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/daemonize.c b/src/libthread/daemonize.c
       t@@ -38,7 +38,15 @@ child(void)
                        raise(WTERMSIG(status));
                        _exit(98);        /* not reached */
                }
       -        fprint(2, "%s: wait pid %d status 0x%ux\n", pid, status);
       +        if(WIFSTOPPED(status)){
       +                fprint(2, "%s: wait pid %d stopped\n", argv0, pid);
       +                return;
       +        }
       +        if(WIFCONTINUED(status)){
       +                fprint(2, "%s: wait pid %d continued\n", argv0, pid);
       +                return;
       +        }
       +        fprint(2, "%s: wait pid %d status 0x%ux\n", argv0, pid, status);
                _exit(99);
        }
        
 (DIR) diff --git a/src/libthread/thread.c b/src/libthread/thread.c
       t@@ -112,12 +112,19 @@ threadalloc(void (*fn)(void*), void *arg, uint stack)
                sigprocmask(SIG_BLOCK, &zero, &t->context.uc.uc_sigmask);
        
                /* must initialize with current context */
       -        getcontext(&t->context.uc);
       +        if(getcontext(&t->context.uc) < 0)
       +                sysfatal("threadalloc getcontext: %r");
        
                /* call makecontext to do the real work. */
                /* leave a few words open on both ends */
                t->context.uc.uc_stack.ss_sp = t->stk+8;
                t->context.uc.uc_stack.ss_size = t->stksize-64;
       +#ifdef __sun__                /* sigh */
       +        /* can avoid this with __MAKECONTEXT_V2_SOURCE but only on SunOS 5.9 */
       +        t->context.uc_stack.ss_sp = 
       +                (char*)t->context.uc_stack.ss_sp
       +                +t->context.uc_stack.ss_size;
       +#endif
                makecontext(&t->context.uc, (void(*)())threadstart, 1, t);
        
                return t;