summaryrefslogtreecommitdiffstats
path: root/src/libthread/sched.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-04-21 19:29:04 +0000
committerrsc <devnull@localhost>2004-04-21 19:29:04 +0000
commita3785ca2cc1c8693d89ebe44216acf781a634718 (patch)
tree2ae82a3a7c462e670e8b0d6e234e301cfd317987 /src/libthread/sched.c
parentcdd61ab0aee825e93688ae5d2cfb86f14baad858 (diff)
downloadplan9port-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.c5
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);