do threading right
diff --git a/src/cmd/plumb/fsys.c b/src/cmd/plumb/fsys.c
index 837f45a..e9be1eb 100644
--- a/src/cmd/plumb/fsys.c
+++ b/src/cmd/plumb/fsys.c
@@ -199,7 +199,7 @@
 	if(post9pservice(p[1], "plumb") < 0)
 		sysfatal("post9pservice plumb: %r");
 	close(p[1]);
-	fsysproc(nil);
+	proccreate(fsysproc, nil, Stack);
 }
 
 static void
diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c
index 968953d..53847cd 100644
--- a/src/cmd/plumb/plumber.c
+++ b/src/cmd/plumb/plumber.c
@@ -26,35 +26,17 @@
 }
 
 void
-mainproc(void *v)
-{
-	Channel *c;
-
-	c = v;
-	printerrors = 0;
-	makeports(rules);
-	startfsys();
-	sendp(c, nil);
-}
-
-void
 threadmain(int argc, char *argv[])
 {
 	char buf[512];
 	int fd;
-	int volatile dofork;
-	Channel *c;
 
 	progname = "plumber";
-	dofork = 1;
 
 	ARGBEGIN{
 	case 'd':
 		debug = 1;
 		break;
-	case 'f':
-		dofork = 0;
-		break;
 	case 'p':
 		plumbfile = ARGF();
 		break;
@@ -83,17 +65,13 @@
 	rules = readrules(plumbfile, fd);
 	close(fd);
 
-	if(dofork)
-		threaddaemonize();
-
 	/*
 	 * Start all processes and threads from other proc
 	 * so we (main pid) can return to user.
 	 */
-	c = chancreate(sizeof(void*), 0);
-	proccreate(mainproc, c, 8192);
-	recvp(c);
-	chanfree(c);
+	printerrors = 0;
+	makeports(rules);
+	startfsys();
 	threadexits(nil);
 }