mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	Fixes issue #9535: Fix pending signals that have been received but not
yet handled by Python to not persist after os.fork() in the child process.
This commit is contained in:
		
						commit
						0b83224c0d
					
				
					 2 changed files with 19 additions and 0 deletions
				
			
		| 
						 | 
					@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
 | 
				
			||||||
Core and Builtins
 | 
					Core and Builtins
 | 
				
			||||||
-----------------
 | 
					-----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Issue #9535: Fix pending signals that have been received but not yet
 | 
				
			||||||
 | 
					  handled by Python to not persist after os.fork() in the child process.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #14794: Fix slice.indices to return correct results for huge values,
 | 
					- Issue #14794: Fix slice.indices to return correct results for huge values,
 | 
				
			||||||
  rather than raising OverflowError.
 | 
					  rather than raising OverflowError.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1389,9 +1389,25 @@ PyOS_InterruptOccurred(void)
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					_clear_pending_signals(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					    if (!is_tripped)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    is_tripped = 0;
 | 
				
			||||||
 | 
					    for (i = 1; i < NSIG; ++i) {
 | 
				
			||||||
 | 
					        Handlers[i].tripped = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PyOS_AfterFork(void)
 | 
					PyOS_AfterFork(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    /* Clear the signal flags after forking so that they aren't handled
 | 
				
			||||||
 | 
					     * in both processes if they came in just before the fork() but before
 | 
				
			||||||
 | 
					     * the interpreter had an opportunity to call the handlers.  issue9535. */
 | 
				
			||||||
 | 
					    _clear_pending_signals();
 | 
				
			||||||
#ifdef WITH_THREAD
 | 
					#ifdef WITH_THREAD
 | 
				
			||||||
    /* PyThread_ReInitTLS() must be called early, to make sure that the TLS API
 | 
					    /* PyThread_ReInitTLS() must be called early, to make sure that the TLS API
 | 
				
			||||||
     * can be called safely. */
 | 
					     * can be called safely. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue