mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Merged revisions 78517 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r78517 | gregory.p.smith | 2010-02-28 10:36:09 -0800 (Sun, 28 Feb 2010) | 3 lines Issue #7481: When a threading.Thread failed to start it would leave the instance stuck in initial state and present in threading.enumerate(). ........
This commit is contained in:
		
							parent
							
								
									d59e44a5a7
								
							
						
					
					
						commit
						3fdd9648cb
					
				
					 3 changed files with 28 additions and 1 deletions
				
			
		|  | @ -247,6 +247,25 @@ def run(self): | |||
|             t.join() | ||||
|         # else the thread is still running, and we have no way to kill it | ||||
| 
 | ||||
|     def test_limbo_cleanup(self): | ||||
|         # Issue 7481: Failure to start thread should cleanup the limbo map. | ||||
|         def fail_new_thread(*args): | ||||
|             raise threading.ThreadError() | ||||
|         _start_new_thread = threading._start_new_thread | ||||
|         threading._start_new_thread = fail_new_thread | ||||
|         try: | ||||
|             t = threading.Thread(target=lambda: None) | ||||
|             try: | ||||
|                 t.start() | ||||
|                 assert False | ||||
|             except threading.ThreadError: | ||||
|                 self.assertFalse( | ||||
|                     t in threading._limbo, | ||||
|                     "Failed to cleanup _limbo map on failure of Thread.start()." | ||||
|                 ) | ||||
|         finally: | ||||
|             threading._start_new_thread = _start_new_thread | ||||
| 
 | ||||
|     def test_finalize_runnning_thread(self): | ||||
|         # Issue 1402: the PyGILState_Ensure / _Release functions may be called | ||||
|         # very late on python exit: on deallocation of a running thread for | ||||
|  |  | |||
|  | @ -465,7 +465,12 @@ def start(self): | |||
|             self._note("%s.start(): starting thread", self) | ||||
|         with _active_limbo_lock: | ||||
|             _limbo[self] = self | ||||
|         try: | ||||
|             _start_new_thread(self._bootstrap, ()) | ||||
|         except Exception: | ||||
|             with _active_limbo_lock: | ||||
|                 del _limbo[self] | ||||
|             raise | ||||
|         self._started.wait() | ||||
| 
 | ||||
|     def run(self): | ||||
|  |  | |||
|  | @ -711,6 +711,9 @@ Library | |||
| - The os.get_exec_path() function to return the list of directories that will | ||||
|   be searched for an executable when launching a subprocess was added. | ||||
| 
 | ||||
| - Issue #7481: When a threading.Thread failed to start it would leave the | ||||
|   instance stuck in initial state and present in threading.enumerate(). | ||||
| 
 | ||||
| Extension Modules | ||||
| ----------------- | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gregory P. Smith
						Gregory P. Smith