set O_NONBLOCK flag to stdout
This commit is contained in:
		
							
								
								
									
										6
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								dwl.c
									
									
									
									
									
								
							| @@ -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 | ||||
|   | ||||
							
								
								
									
										16
									
								
								util.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								util.c
									
									
									
									
									
								
							| @@ -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; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user