diff options
| author | rsc <devnull@localhost> | 2004-04-21 19:29:04 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2004-04-21 19:29:04 +0000 |
| commit | a3785ca2cc1c8693d89ebe44216acf781a634718 (patch) | |
| tree | 2ae82a3a7c462e670e8b0d6e234e301cfd317987 /src/libthread/sched.c | |
| parent | cdd61ab0aee825e93688ae5d2cfb86f14baad858 (diff) | |
| download | plan9port-a3785ca2cc1c8693d89ebe44216acf781a634718.tar.gz plan9port-a3785ca2cc1c8693d89ebe44216acf781a634718.zip | |
Tweaks to make libthread tell Valgrind about its stack limits,
so that Valgrind can detect stack overflow for me.
Diffstat (limited to 'src/libthread/sched.c')
| -rw-r--r-- | src/libthread/sched.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/libthread/sched.c b/src/libthread/sched.c index d193d6ce..57d597ba 100644 --- a/src/libthread/sched.c +++ b/src/libthread/sched.c @@ -166,14 +166,15 @@ Resched: p = _threadgetproc(); //fprint(2, "p %p\n", p); if((t = p->thread) != nil){ - if((ulong)&p < (ulong)t->stk){ /* stack overflow */ - fprint(2, "stack overflow %lux %lux\n", (ulong)&p, (ulong)t->stk); + 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(); } // _threaddebug(DBGSCHED, "pausing, state=%s set %p goto %p", // psstate(t->state), &t->sched, &p->sched); if(_setlabel(&t->sched)==0) _gotolabel(&p->sched); + _threadstacklimit(t->stk); return; }else{ t = runthread(p); |
