|  | @ -178,6 +178,7 @@ static void setlayout(const Arg *arg); | 
														
													
														
															
																|  |  | static void setmfact(const Arg *arg); |  |  | static void setmfact(const Arg *arg); | 
														
													
														
															
																|  |  | static void setup(void); |  |  | static void setup(void); | 
														
													
														
															
																|  |  | static void showhide(Client *c); |  |  | static void showhide(Client *c); | 
														
													
														
															
																|  |  |  |  |  | static void sigchld(int signal); | 
														
													
														
															
																|  |  | static void spawn(const Arg *arg); |  |  | static void spawn(const Arg *arg); | 
														
													
														
															
																|  |  | static void tag(const Arg *arg); |  |  | static void tag(const Arg *arg); | 
														
													
														
															
																|  |  | static int textnw(const char *text, unsigned int len); |  |  | static int textnw(const char *text, unsigned int len); | 
														
													
												
													
														
															
																|  | @ -1340,22 +1341,24 @@ showhide(Client *c) { | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void | 
														
													
														
															
																|  |  |  |  |  | sigchld(int signal) { | 
														
													
														
															
																|  |  |  |  |  | while(0 < waitpid(-1, NULL, WNOHANG)); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void |  |  | void | 
														
													
														
															
																|  |  | spawn(const Arg *arg) { |  |  | spawn(const Arg *arg) { | 
														
													
														
															
																|  |  | /* The double-fork construct avoids zombie processes and keeps the code |  |  |  | 
														
													
														
															
																|  |  | * clean from stupid signal handlers. */ |  |  |  | 
														
													
														
															
																|  |  |  |  |  | signal(SIGCHLD, sigchld); | 
														
													
														
															
																|  |  | if(fork() == 0) { |  |  | if(fork() == 0) { | 
														
													
														
															
																|  |  | if(fork() == 0) { |  |  |  | 
														
													
														
															
																|  |  | if(dpy) |  |  |  | 
														
													
														
															
																|  |  | close(ConnectionNumber(dpy)); |  |  |  | 
														
													
														
															
																|  |  | setsid(); |  |  |  | 
														
													
														
															
																|  |  | execvp(((char **)arg->v)[0], (char **)arg->v); |  |  |  | 
														
													
														
															
																|  |  | fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); |  |  |  | 
														
													
														
															
																|  |  | perror(" failed"); |  |  |  | 
														
													
														
															
																|  |  | } |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if(dpy) | 
														
													
														
															
																|  |  |  |  |  | close(ConnectionNumber(dpy)); | 
														
													
														
															
																|  |  |  |  |  | setsid(); | 
														
													
														
															
																|  |  |  |  |  | execvp(((char **)arg->v)[0], (char **)arg->v); | 
														
													
														
															
																|  |  |  |  |  | fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); | 
														
													
														
															
																|  |  |  |  |  | perror(" failed"); | 
														
													
														
															
																|  |  | exit(0); |  |  | exit(0); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | wait(0); |  |  |  | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void |  |  | void | 
														
													
												
													
														
															
																|  | 
 |