2012-09-29 11:40:38 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								import signal, subprocess, sys, time
							 | 
						
					
						
							
								
									
										
										
										
											2010-12-14 14:38:00 +00:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# On Linux this causes os.waitpid to fail with OSError as the OS has already
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# reaped our child process.  The wait() passing the OSError on to the caller
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# and causing us to exit with an error is what we are testing against.
							 | 
						
					
						
							
								
									
										
										
										
											2010-12-14 18:18:49 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								signal.signal(signal.SIGCHLD, signal.SIG_IGN)
							 | 
						
					
						
							
								
									
										
										
										
											2010-12-14 14:38:00 +00:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								subprocess.Popen([sys.executable, '-c', 'print("albatross")']).wait()
							 | 
						
					
						
							
								
									
										
										
										
											2012-09-29 11:40:38 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# Also ensure poll() handles an errno.ECHILD appropriately.
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								p = subprocess.Popen([sys.executable, '-c', 'print("albatross")'])
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								num_polls = 0
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								while p.poll() is None:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    # Waiting for the process to finish.
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    time.sleep(0.01)  # Avoid being a CPU busy loop.
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    num_polls += 1
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    if num_polls > 3000:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        raise RuntimeError('poll should have returned 0 within 30 seconds')
							 |