mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	Issue #10517: After fork(), reinitialize the TLS used by the PyGILState_*
APIs, to avoid a crash with the pthread implementation in RHEL 5. Patch by Charles-François Natali.
This commit is contained in:
		
							parent
							
								
									43ae619925
								
							
						
					
					
						commit
						0c759febb6
					
				
					 4 changed files with 23 additions and 0 deletions
				
			
		|  | @ -585,6 +585,23 @@ _PyGILState_Fini(void) | |||
|     autoInterpreterState = NULL; | ||||
| } | ||||
| 
 | ||||
| /* Reset the TLS key - called by PyOS_AfterFork.
 | ||||
|  * This should not be necessary, but some - buggy - pthread implementations | ||||
|  * don't flush TLS on fork, see issue #10517. | ||||
|  */ | ||||
| void | ||||
| _PyGILState_Reinit(void) | ||||
| { | ||||
|     PyThreadState *tstate = PyGILState_GetThisThreadState(); | ||||
|     PyThread_delete_key(autoTLSkey); | ||||
|     if ((autoTLSkey = PyThread_create_key()) == -1) | ||||
|         Py_FatalError("Could not allocate TLS entry"); | ||||
| 
 | ||||
|     /* re-associate the current thread state with the new key */ | ||||
|     if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) | ||||
|         Py_FatalError("Couldn't create autoTLSkey mapping"); | ||||
| } | ||||
| 
 | ||||
| /* When a thread state is created for a thread by some mechanism other than
 | ||||
|    PyGILState_Ensure, it's important that the GILState machinery knows about | ||||
|    it so it doesn't try to create another thread state for the thread (this is | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Antoine Pitrou
						Antoine Pitrou