all repos — dwm @ 5b44976a2d8bdd1397727663ce019374d6b2730a

fork of suckless dynamic window manager

if stdin writer stops working, dwm consumed much IO load because it still tried to select on this fd, fixed
Anselm R. Garbe garbeam@wmii.de
Fri, 14 Jul 2006 17:30:37 +0200
commit

5b44976a2d8bdd1397727663ce019374d6b2730a

parent

6475be926bef4916ce632988a2fa408a637babc7

1 files changed, 7 insertions(+), 3 deletions(-)

jump to
M main.cmain.c

@@ -190,6 +190,7 @@ int i, n;

fd_set rd; XSetWindowAttributes wa; unsigned int mask; + Bool readstdin = True; Window w; XEvent ev;

@@ -283,7 +284,8 @@ /* main event loop, reads status text from stdin as well */

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 @@ if(handler[ev.type])

(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)