shithub: riscv

Download patch

ref: b2b80a3da5d03ddb2f9cb15c4cf769a432e347ee
parent: 85b8d253d496c115766a37f51ea72cbec78090a8
author: spew <devnull@localhost>
date: Sat Mar 25 09:51:33 EDT 2017

games/galaxy: fix exit race condition by pausing the galaxy before threadexitsall

--- a/sys/src/games/galaxy/galaxy.c
+++ b/sys/src/games/galaxy/galaxy.c
@@ -442,7 +442,7 @@
 		G *= z;
 		break;
 	case EXIT:
-		threadexitsall(nil);
+		quit(nil);
 		break;
 	}
 	drawglxy();
@@ -496,14 +496,14 @@
 
 	for(;;) {
 		recv(realkc->c, &r);
-		if(r == Kdel) {
-			threadexitsall(nil);
-		}
+		if(r == Kdel)
+			quit(nil);
+
 		if(kc.c != nil)
 			send(kc.c, &r);
 		else switch(r) {
 		case 'q':
-			threadexitsall(nil);
+			quit(nil);
 			break;
 		case 's':
 			stats ^= 1;
@@ -539,9 +539,16 @@
 }
 
 void
+quit(char *e)
+{
+	pause(0, 0);
+	threadexitsall(e);
+}
+
+void
 usage(void)
 {
-	fprint(2, "Usage: %s [-t throttle] [-G gravity] [-ε smooth] [-i] [file]\n", argv0);
+	fprint(2, "Usage: %s [-t throttle] [-G gravity] [-ε smooth] [-p extraproc] [-i] [file]\n", argv0);
 	threadexitsall("usage");
 }
 
--- a/sys/src/games/galaxy/galaxy.h
+++ b/sys/src/games/galaxy/galaxy.h
@@ -49,6 +49,8 @@
 	BODY,
 };
 
+void quit(char*);
+
 Image *randcol(void);
 Point topoint(Vector);
 Vector tovector(Point);