Commit Diff


commit - 00c6cee80a371a38984a44945df40c4136173e81
commit + d93cc14ecee8fbb0dc0fc746713aba7ee0979c4c
blob - 683ddd12710973a6da4271e918ecddf8281491a0
blob + 17e8c12bb8ec7bddad7d1c9b15701e33d74c0f0c
--- src/libthread/Linux.c
+++ src/libthread/Linux.c
@@ -378,7 +378,7 @@ myperproc(void)
 			break;
 		}
 	}
-	fprint(2, "myperproc %d: cannot find self\n", pid);
+	fprint(2, "myperproc %d (%s): cannot find self\n", pid, argv0);
 	abort();
 	return nil;
 }
blob - ff748acc169efa6673f5658f3ea104282d2ffebe
blob + acd56fa2ef285dede473a9f06fced8be142aa41a
--- src/libthread/thread.c
+++ src/libthread/thread.c
@@ -39,6 +39,11 @@ _threaddebug(char *fmt, ...)
 		snprint(buf, sizeof buf, "/tmp/%s.tlog", p);
 		if((fd = create(buf, OWRITE, 0666)) < 0)
 			fd = open("/dev/null", OWRITE);
+		if(fd >= 0 && fd != 2){
+			dup(fd, 2);
+			close(fd);
+			fd = 2;
+		}
 	}
 
 	va_start(arg, fmt);
@@ -331,6 +336,7 @@ Out:
 		threadexitsall(p->msg);
 	unlock(&threadnproclock);
 	unlock(&p->lock);
+	_threadsetproc(nil);
 	free(p);
 }
 
@@ -599,7 +605,7 @@ threadrwakeup(Rendez *r, int all, ulong pc)
 static int threadargc;
 static char **threadargv;
 int mainstacksize;
-
+extern int _p9usepwlibrary;	/* getgrgid etc. smash the stack - tell _p9dir just say no */
 static void
 threadmainstart(void *v)
 {
@@ -613,6 +619,7 @@ threadmainstart(void *v)
 	 * This means the pthread implementation is not suitable for
 	 * running under libthread.  Time to write your own.  Sorry.
 	 */
+	_p9usepwlibrary = 0;
 	threadmainproc = proc();
 	threadmain(threadargc, threadargv);
 }