Commit Diff


commit - 5186b55afc97730b733a85cdcb38d6ee7fdd32c7
commit + 0829f75bba8a5eb60a7f46e21aa266736b4c4bab
blob - 3c71e4b1b71d30e435c50a0bd6958459cdf74c5d
blob + 1875eb98a5ae1ea839405bce0674562db630b7ca
--- src/libthread/exec.c
+++ src/libthread/exec.c
@@ -62,6 +62,7 @@ _threadspawn(int fd[3], char *cmd, char *argv[])
 	int i, n, p[2], pid;
 	char exitstr[100];
 
+	notifyoff("sys: child");	/* do not let child note kill us */
 	if(pipe(p) < 0)
 		return -1;
 	if(fcntl(p[0], F_SETFD, 1) < 0 || fcntl(p[1], F_SETFD, 1) < 0){
blob - 94910f2c376c8845b09dfdf7548a8392e0d4a34e
blob + 06230f53fd82f6e09be4c68f59c11fb84c18c2d9
--- src/libthread/thread.c
+++ src/libthread/thread.c
@@ -155,6 +155,10 @@ _threadcreate(Proc *p, void (*fn)(void*), void *arg, u
 {
 	_Thread *t;
 
+	/* defend against bad C libraries */
+	if(stack < (256<<10))
+		stack = 256<<10;
+	
 	t = threadalloc(fn, arg, stack);
 	t->proc = p;
 	addthreadinproc(p, t);