change to use new thread library
diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
index 18765bc..14d17e2 100644
--- a/src/cmd/acme/acme.c
+++ b/src/cmd/acme/acme.c
@@ -41,6 +41,7 @@
 
 Command *command;
 
+void	shutdownthread(void*);
 void	acmeerrorinit(void);
 void	readfile(Column*, char*);
 static int	shutdown(void*, char*);
@@ -167,14 +168,23 @@
 
 	cwait = threadwaitchan();
 	ccommand = chancreate(sizeof(Command**), 0);
+	chansetname(ccommand, "ccommand");
 	ckill = chancreate(sizeof(Rune*), 0);
+	chansetname(ckill, "ckill");
 	cxfidalloc = chancreate(sizeof(Xfid*), 0);
+	chansetname(cxfidalloc, "cxfidalloc");
 	cxfidfree = chancreate(sizeof(Xfid*), 0);
+	chansetname(cxfidfree, "cxfidfree");
 	cnewwindow = chancreate(sizeof(Channel*), 0);
+	chansetname(cnewwindow, "cnewwindow");
 	cerr = chancreate(sizeof(char*), 0);
+	chansetname(cerr, "cerr");
 	cedit = chancreate(sizeof(int), 0);
+	chansetname(cedit, "cedit");
 	cexit = chancreate(sizeof(int), 0);
+	chansetname(cexit, "cexit");
 	cwarn = chancreate(sizeof(void*), 1);
+	chansetname(cwarn, "cwarn");
 	if(cwait==nil || ccommand==nil || ckill==nil || cxfidalloc==nil || cxfidfree==nil || cerr==nil || cexit==nil || cwarn==nil){
 		fprint(2, "acme: can't create initial channels: %r\n");
 		exits("channels");
@@ -248,8 +258,8 @@
 	threadcreate(waitthread, nil, STACK);
 	threadcreate(xfidallocthread, nil, STACK);
 	threadcreate(newwindowthread, nil, STACK);
-
-	threadnotify(shutdown, 1);
+/*	threadcreate(shutdownthread, nil, STACK); */
+/*	threadnotify(shutdown, 1); */
 	recvul(cexit);
 	killprocs();
 	threadexitsall(nil);
@@ -307,6 +317,21 @@
 	return 0;
 }
 
+/*
+void
+shutdownthread(void *v)
+{
+	char *msg;
+	Channel *c;
+
+	USED(v);
+
+	c = threadnotechan();
+	while((msg = recvp(c)) != nil)
+		shutdown(nil, msg);
+}
+*/
+
 void
 killprocs(void)
 {
@@ -332,7 +357,7 @@
 	USED(v);
 	threadsetname("acmeerrorproc");
 	buf = emalloc(8192+1);
-	while((n=threadread(errorfd, buf, 8192)) >= 0){
+	while((n=read(errorfd, buf, 8192)) >= 0){
 		buf[n] = '\0';
 		sendp(cerr, estrdup(buf));
 	}
@@ -367,7 +392,7 @@
 	errorfd = pfd[1];
 	if(errorfd < 0)
 		error("can't re-open acmeerror file");
-	threadcreate(acmeerrorproc, nil, STACK);
+	proccreate(acmeerrorproc, nil, STACK);
 }
 
 /*
@@ -648,21 +673,6 @@
 	alts[WCmd].op = CHANRCV;
 	alts[NWALT].op = CHANEND;
 
-	/*
-	 * BUG.  Actually there's no bug here but this is the
-	 * first place you'd look.  When a program is run,
-	 * it doesn't disappear from the main tag until the
-	 * mouse is moved or keyboard is hit.  This would
-	 * suggest that the WWait case isn't working right,
-	 * but what's actually going on is that the X11 code
-	 * is running a select-based threading loop that
-	 * doesn't get interrupted until there is data from X11.
-	 * This was done to make acme work on Suns and
-	 * other systems where our threading was sub-par.
-	 * Now that we've gotten pthreads working (sort of),
-	 * we might be able to fix this properly.
-	 * But the bug is in libdraw and libthread, not here.
-	 */
 	command = nil;
 	for(;;){
 		switch(alt(alts)){
@@ -719,7 +729,7 @@
 					textsetselect(t, 0, 0);
 				}
 				if(w->msg[0])
-					warning(c->md, "%S: %s\n", c->name, w->msg);
+					warning(c->md, "%.*S: exit %s\n", c->nname-1, c->name, w->msg);
 				flushimage(display, 1);
 			}
 			qunlock(&row.lk);
@@ -791,6 +801,7 @@
 			else{
 				x = emalloc(sizeof(Xfid));
 				x->c = chancreate(sizeof(void(*)(Xfid*)), 0);
+				chansetname(x->c, "xc%p", x->c);
 				x->arg = x;
 				threadcreate(xfidctl, x->arg, STACK);
 			}
diff --git a/src/cmd/acme/edit.c b/src/cmd/acme/edit.c
index e052430..c41985b 100644
--- a/src/cmd/acme/edit.c
+++ b/src/cmd/acme/edit.c
@@ -178,6 +178,7 @@
 	resetxec();
 	if(editerrc == nil){
 		editerrc = chancreate(sizeof(char*), 0);
+		chansetname(editerrc, "editerrc");
 		lastpat = allocstring(0);
 	}
 	threadcreate(editthread, nil, STACK);
diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
index ddc28a8..a38ae88 100644
--- a/src/cmd/acme/exec.c
+++ b/src/cmd/acme/exec.c
@@ -1585,6 +1585,7 @@
 	arg = emalloc(10*sizeof(void*));
 	c = emalloc(sizeof *c);
 	cpid = chancreate(sizeof(ulong), 0);
+	chansetname(cpid, "cpid %s", s);
 	arg[0] = win;
 	arg[1] = s;
 	arg[2] = rdir;
diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c
index a095529..66b935f 100644
--- a/src/cmd/acme/fsys.c
+++ b/src/cmd/acme/fsys.c
@@ -126,7 +126,7 @@
 	fmtinstall('F', fcallfmt);
 	if((u = getuser()) != nil)
 		user = estrdup(u);
-	threadcreate(fsysproc, nil, STACK);
+	proccreate(fsysproc, nil, STACK);
 }
 
 void
@@ -142,7 +142,7 @@
 	x = nil;
 	for(;;){
 		buf = emalloc(messagesize+UTFmax);	/* overflow for appending partial rune in xfidwrite */
-		n = threadread9pmsg(sfd, buf, messagesize);
+		n = read9pmsg(sfd, buf, messagesize);
 		if(n <= 0){
 			if(closing)
 				break;
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index d760745..eda51ef 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -45,6 +45,7 @@
 		fprint(2, "acme: can't initialize plumber: %r\n");
 	else{
 		cplumb = chancreate(sizeof(Plumbmsg*), 0);
+		chansetname(cplumb, "cplumb");
 		threadcreate(plumbproc, nil, STACK);
 	}
 	plumbsendfid = plumbopenfid("send", OWRITE|OCEXEC);
diff --git a/src/cmd/acme/regx.c b/src/cmd/acme/regx.c
index f934187..8904e9c 100644
--- a/src/cmd/acme/regx.c
+++ b/src/cmd/acme/regx.c
@@ -128,6 +128,7 @@
 rxinit(void)
 {
 	rechan = chancreate(sizeof(Inst*), 0);
+	chansetname(rechan, "rechan");
 	lastregexp = runemalloc(1);
 }
 
diff --git a/src/cmd/acme/time.c b/src/cmd/acme/time.c
index f80891a..35982b7 100644
--- a/src/cmd/acme/time.c
+++ b/src/cmd/acme/time.c
@@ -50,7 +50,7 @@
 	nt = 0;
 	old = msec();
 	for(;;){
-		threadsleep(1);	/* will sleep minimum incr */
+		sleep(1);	/* will sleep minimum incr */
 		new = msec();
 		dt = new-old;
 		old = new;
@@ -98,7 +98,8 @@
 timerinit(void)
 {
 	ctimer = chancreate(sizeof(Timer*), 100);
-	threadcreate(timerproc, nil, STACK);
+	chansetname(ctimer, "ctimer");
+	proccreate(timerproc, nil, STACK);
 }
 
 Timer*
@@ -112,6 +113,7 @@
 	else{
 		t = emalloc(sizeof(Timer));
 		t->c = chancreate(sizeof(int), 0);
+		chansetname(t->c, "tc%p", t->c);
 	}
 	t->next = nil;
 	t->dt = dt;