diff options
| -rw-r--r-- | dwl.c | 6 | ||||
| -rw-r--r-- | util.c | 16 | ||||
| -rw-r--r-- | util.h | 1 | 
3 files changed, 23 insertions, 0 deletions
| @@ -2190,6 +2190,12 @@ run(char *startup_cmd)  		close(piperw[1]);  		close(piperw[0]);  	} + +	/* Mark stdout as non-blocking to avoid people who does not close stdin +	 * nor consumes it in their startup script getting dwl frozen */ +	if (fd_set_nonblock(STDOUT_FILENO) < 0) +		close(STDOUT_FILENO); +  	printstatus();  	/* At this point the outputs are initialized, choose initial selmon based on @@ -3,6 +3,7 @@  #include <stdio.h>  #include <stdlib.h>  #include <string.h> +#include <fcntl.h>  #include "util.h" @@ -33,3 +34,18 @@ ecalloc(size_t nmemb, size_t size)  		die("calloc:");  	return p;  } + +int +fd_set_nonblock(int fd) { +	int flags = fcntl(fd, F_GETFL); +    if (flags < 0) { +		perror("fcntl(F_GETFL):"); +        return -1; +    } +    if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) { +		perror("fcntl(F_SETFL):"); +		return -1; +    } + +	return 0; +} @@ -2,3 +2,4 @@  void die(const char *fmt, ...);  void *ecalloc(size_t nmemb, size_t size); +int fd_set_nonblock(int fd); | 
