Commit Diff


commit - 143cdf575889feef82ed98a19df8761002d3895f
commit + a83ccf38d72b708bb7aa69416a9fe9b090e2e97f
blob - 26319e2e7d2dfb98a39be1995fc3e89190afdb2f
blob + aaec3ef02b5bc0aec87898357e5ab89ef376ff97
--- src/cmd/9pfuse/a.h
+++ src/cmd/9pfuse/a.h
@@ -37,6 +37,7 @@ extern char *fusemtpt;
 void		freefusemsg(FuseMsg *m);
 int		fusefmt(Fmt*);
 void		initfuse(char *mtpt);
+void	waitfuse(void);
 FuseMsg*	readfusemsg(void);
 void		replyfuse(FuseMsg *m, void *arg, int narg);
 void		replyfuseerrno(FuseMsg *m, int e);
blob - 5c071ab4413db69c24214b4805771e83427508bf
blob + 9918994ddebdde06392f94970d1043ba0c67a9a3
--- src/cmd/9pfuse/fuse.c
+++ src/cmd/9pfuse/fuse.c
@@ -763,7 +763,6 @@ mountfuse(char *mtpt)
 	close(p[0]);
 	fd = recvfd(p[1]);
 	close(p[1]);
-	waitpid();
 	return fd;
 #elif defined(__FreeBSD__)
 	int pid, fd;
@@ -781,12 +780,17 @@ mountfuse(char *mtpt)
 		fprint(2, "exec mount_fusefs: %r\n");
 		_exit(1);
 	}
-	waitpid();
 	return fd;
 #else
 	werrstr("cannot mount fuse on this system");
 	return -1;
 #endif
+}
+
+void
+waitfuse(void)
+{
+	waitpid();
 }
 
 void
blob - 5a2ef8f6f299012da71e19d43f6a0356859879ba
blob + db79a5ea2f2c34d9c128f0235a2211f23bbbb0b6
--- src/cmd/9pfuse/main.c
+++ src/cmd/9pfuse/main.c
@@ -97,6 +97,11 @@ threadmain(int argc, char **argv)
 	sendp(fusechan, nil);	/* sync */
 
 	proccreate(fusereader, nil, STACK);
+	/*
+	 * Now that we're serving FUSE, we can wait
+	 * for the mount to finish and exit back to the user.
+	 */
+	waitfuse();
 	threadexits(0);
 }