mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Merged revisions 78519 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
  r78519 | gregory.p.smith | 2010-02-28 10:57:46 -0800 (Sun, 28 Feb 2010) | 10 lines
  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
							
								
									c08cae9fa1
								
							
						
					
					
						commit
						31d12ca843
					
				
					 3 changed files with 28 additions and 1 deletions
				
			
		|  | @ -221,6 +221,25 @@ def run(self): | ||||||
|             t.join() |             t.join() | ||||||
|         # else the thread is still running, and we have no way to kill it |         # 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): |     def test_finalize_runnning_thread(self): | ||||||
|         # Issue 1402: the PyGILState_Ensure / _Release functions may be called |         # Issue 1402: the PyGILState_Ensure / _Release functions may be called | ||||||
|         # very late on python exit: on deallocation of a running thread for |         # very late on python exit: on deallocation of a running thread for | ||||||
|  |  | ||||||
|  | @ -455,7 +455,12 @@ def start(self): | ||||||
|             self._note("%s.start(): starting thread", self) |             self._note("%s.start(): starting thread", self) | ||||||
|         with _active_limbo_lock: |         with _active_limbo_lock: | ||||||
|             _limbo[self] = self |             _limbo[self] = self | ||||||
|         _start_new_thread(self._bootstrap, ()) |         try: | ||||||
|  |             _start_new_thread(self._bootstrap, ()) | ||||||
|  |         except Exception: | ||||||
|  |             with _active_limbo_lock: | ||||||
|  |                 del _limbo[self] | ||||||
|  |             raise | ||||||
|         self._started.wait() |         self._started.wait() | ||||||
| 
 | 
 | ||||||
|     def run(self): |     def run(self): | ||||||
|  |  | ||||||
|  | @ -332,6 +332,9 @@ Library | ||||||
| - Issue #7066: archive_util.make_archive now restores the cwd if an error is | - Issue #7066: archive_util.make_archive now restores the cwd if an error is | ||||||
|   raised. Initial patch by Ezio Melotti. |   raised. Initial patch by Ezio Melotti. | ||||||
| 
 | 
 | ||||||
|  | - 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 | Extension Modules | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gregory P. Smith
						Gregory P. Smith