|  |  | @ -178,6 +178,7 @@ static void setlayout(const Arg *arg); | 
			
		
	
		
			
				
					|  |  |  | static void setmfact(const Arg *arg); | 
			
		
	
		
			
				
					|  |  |  | static void setup(void); | 
			
		
	
		
			
				
					|  |  |  | static void showhide(Client *c); | 
			
		
	
		
			
				
					|  |  |  | static void sigchld(int signal); | 
			
		
	
		
			
				
					|  |  |  | static void spawn(const Arg *arg); | 
			
		
	
		
			
				
					|  |  |  | static void tag(const Arg *arg); | 
			
		
	
		
			
				
					|  |  |  | 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 | 
			
		
	
		
			
				
					|  |  |  | 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(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); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | wait(0); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | void | 
			
		
	
	
		
			
				
					|  |  | 
 |