Commit Diff


commit - 00d75e0eaefc3d52a6bb631e4747da2b88e7c393
commit + e4d832222ba5519db94c7512c1fb82bd32491120
blob - ea4e088f835558f07a2dad2568b23dbe542ecd4a
blob + 69c7d546522fed316f581aae75c2e276be4a875e
--- src/lib9/rfork.c
+++ src/lib9/rfork.c
@@ -15,13 +15,14 @@ p9rfork(int flags)
 {
 	int pid, status;
 	int p[2];
-	int n;
+	int i, n;
 	char buf[128], *q;
+	extern char **environ;
 
 	if((flags&(RFPROC|RFFDG|RFMEM)) == (RFPROC|RFFDG)){
 		/* check other flags before we commit */
-		flags &= ~(RFPROC|RFFDG);
-		n = (flags & ~(RFNOTEG|RFNAMEG|RFNOWAIT));
+		flags &= ~(RFPROC|RFFDG|RFENVG);
+		n = (flags & ~(RFNOTEG|RFNAMEG|RFNOWAIT|RFCENVG));
 		if(n){
 			werrstr("unknown flags %08ux in rfork", n);
 			return -1;
@@ -99,6 +100,9 @@ p9rfork(int flags)
 		}
 		if(pid != 0)
 			return pid;
+		if(flags&RFCENVG)
+			if(environ)
+				*environ = nil;
 	}
 	if(flags&RFPROC){
 		werrstr("cannot use rfork for shared memory -- use libthread");