Many small edits.
diff --git a/src/libthread/channel.c b/src/libthread/channel.c
index 4dc51fc..903889a 100644
--- a/src/libthread/channel.c
+++ b/src/libthread/channel.c
@@ -249,6 +249,7 @@
Channel *c;
_Thread *t;
+ needstack(512);
for(i=0; a[i].op != CHANEND && a[i].op != CHANNOBLK; i++)
;
n = i;
diff --git a/src/libthread/daemonize.c b/src/libthread/daemonize.c
index c6e00d1..4ed252e 100644
--- a/src/libthread/daemonize.c
+++ b/src/libthread/daemonize.c
@@ -42,10 +42,12 @@
fprint(2, "%s: wait pid %d stopped\n", argv0, pid);
return;
}
+#ifdef WIFCONTINUED
if(WIFCONTINUED(status)){
fprint(2, "%s: wait pid %d continued\n", argv0, pid);
return;
}
+#endif
fprint(2, "%s: wait pid %d status 0x%ux\n", argv0, pid, status);
_exit(99);
}
@@ -84,8 +86,6 @@
sigpid = 1;
- threadlinklibrary();
-
if(pipe(p) < 0)
sysfatal("passer pipe: %r");
diff --git a/src/libthread/thread.c b/src/libthread/thread.c
index 2b6d1e3..b886e30 100644
--- a/src/libthread/thread.c
+++ b/src/libthread/thread.c
@@ -169,6 +169,7 @@
{
Proc *p;
+ needstack(0);
p = proc();
//print("threadswtch %p\n", p);
contextswitch(&p->thread->context, &p->schedcontext);
@@ -324,6 +325,20 @@
va_end(arg);
}
+void
+needstack(int n)
+{
+ _Thread *t;
+
+ t = proc()->thread;
+
+ if((char*)&t <= (char*)t->stk
+ || (char*)&t - (char*)t->stk < 256+n){
+ fprint(2, "thread stack overflow\n");
+ abort();
+ }
+}
+
/*
* locking
*/
@@ -499,11 +514,6 @@
threadmain(threadargc, threadargv);
}
-void
-threadlinklibrary(void)
-{
-}
-
int
main(int argc, char **argv)
{