mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Call waitpid on SIGCHLD even if client not attached, it is possible (on
very slow platforms) for the first daemon() child to still be running when client_attached is set so we end up with a zombie. From J Raynor.
This commit is contained in:
		
							
								
								
									
										12
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								client.c
									
									
									
									
									
								
							@@ -433,15 +433,11 @@ client_signal(int sig, unused short events, unused void *data)
 | 
				
			|||||||
	struct sigaction sigact;
 | 
						struct sigaction sigact;
 | 
				
			||||||
	int		 status;
 | 
						int		 status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!client_attached) {
 | 
						if (sig == SIGCHLD)
 | 
				
			||||||
		switch (sig) {
 | 
							waitpid(WAIT_ANY, &status, WNOHANG);
 | 
				
			||||||
		case SIGCHLD:
 | 
						else if (!client_attached) {
 | 
				
			||||||
			waitpid(WAIT_ANY, &status, WNOHANG);
 | 
							if (sig == SIGTERM)
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case SIGTERM:
 | 
					 | 
				
			||||||
			event_loopexit(NULL);
 | 
								event_loopexit(NULL);
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		switch (sig) {
 | 
							switch (sig) {
 | 
				
			||||||
		case SIGHUP:
 | 
							case SIGHUP:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user