Преглед на файлове

if stdin writer stops working, dwm consumed much IO load because it still tried to select on this fd, fixed

Anselm R. Garbe преди 19 години
родител
ревизия
5b44976a2d
променени са 1 файла, в които са добавени 7 реда и са изтрити 3 реда
  1. 7 3
      main.c

+ 7 - 3
main.c

@@ -190,6 +190,7 @@ main(int argc, char *argv[])
 	fd_set rd;
 	XSetWindowAttributes wa;
 	unsigned int mask;
+	Bool readstdin = True;
 	Window w;
 	XEvent ev;
 
@@ -283,7 +284,8 @@ main(int argc, char *argv[])
 Mainloop:
 	while(running) {
 		FD_ZERO(&rd);
-		FD_SET(STDIN_FILENO, &rd);
+		if(readstdin)
+			FD_SET(STDIN_FILENO, &rd);
 		FD_SET(ConnectionNumber(dpy), &rd);
 
 		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
@@ -299,11 +301,13 @@ Mainloop:
 						(handler[ev.type])(&ev); /* call handler */
 				}
 			}
-			if(FD_ISSET(STDIN_FILENO, &rd)) {
+			if(readstdin && FD_ISSET(STDIN_FILENO, &rd)) {
 				i = n = 0;
 				for(;;) {
 					if((i = getchar()) == EOF) {
-						stext[0] = 0;
+						/* broken pipe/end of producer */
+						readstdin = False;
+						strcpy(stext, "broken pipe");
 						goto Mainloop;
 					}
 					if(i == '\n' || n >= sizeof(stext) - 1)