if stdin writer stops working, dwm consumed much IO load because it still tried to select on this fd, fixed
authorAnselm R. Garbe <garbeam@wmii.de>
Fri, 14 Jul 2006 17:30:37 +0200
changeset 65 4f7b232bd72d
parent 64 46d44d185464
child 66 50450aa24a46
if stdin writer stops working, dwm consumed much IO load because it still tried to select on this fd, fixed
main.c
--- a/main.c	Fri Jul 14 13:27:01 2006 +0200
+++ b/main.c	Fri Jul 14 17:30:37 2006 +0200
@@ -190,6 +190,7 @@
 	fd_set rd;
 	XSetWindowAttributes wa;
 	unsigned int mask;
+	Bool readstdin = True;
 	Window w;
 	XEvent ev;
 
@@ -283,7 +284,8 @@
 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 @@
 						(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)