URI: 
       thow much stack do we need? - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit fb36ed82ec7470efe4e334ddc054bcb4fa06ae9e
   DIR parent 2b4b2ae19107f2c7e45ca6ab6f73c9c8a5fb84dd
  HTML Author: rsc <devnull@localhost>
       Date:   Wed, 21 Apr 2004 22:47:15 +0000
       
       how much stack do we need?
       
       Diffstat:
         M src/libthread/sched.c               |      20 ++++++++++++++++----
       
       1 file changed, 16 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/src/libthread/sched.c b/src/libthread/sched.c
       t@@ -157,6 +157,21 @@ relock:
        }
        
        void
       +needstack(int howmuch)
       +{
       +        Proc *p;
       +        Thread *t;
       +
       +        p = _threadgetproc();
       +        if(p == nil || (t=p->thread) == nil)
       +                return;
       +        if((ulong)&howmuch < (ulong)t->stk+howmuch){        /* stack overflow waiting to happen */
       +                fprint(2, "stack overflow: stack at 0x%lux, limit at 0x%lux, need 0x%lux\n", (ulong)&p, (ulong)t->stk, howmuch);
       +                abort();
       +        }
       +}
       +
       +void
        _sched(void)
        {
                Proc *p;
       t@@ -166,10 +181,7 @@ Resched:
                p = _threadgetproc();
        //fprint(2, "p %p\n", p);
                if((t = p->thread) != nil){
       -                if((ulong)&p < (ulong)t->stk+512){        /* stack overflow waiting to happen */
       -                        fprint(2, "stack overflow: stack at %lux, limit at %lux\n", (ulong)&p, (ulong)t->stk);
       -                        abort();
       -                }
       +                needstack(512);
                //        _threaddebug(DBGSCHED, "pausing, state=%s set %p goto %p",
                //                psstate(t->state), &t->sched, &p->sched);
                        if(_setlabel(&t->sched)==0)