mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	Merged revisions 76117 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r76117 | antoine.pitrou | 2009-11-05 14:42:29 +0100 (jeu., 05 nov. 2009) | 5 lines Issue #7264: Fix a possible deadlock when deallocating thread-local objects which are part of a reference cycle. ........
This commit is contained in:
		
							parent
							
								
									cfed029c42
								
							
						
					
					
						commit
						bdec11fde7
					
				
					 3 changed files with 12 additions and 3 deletions
				
			
		|  | @ -217,10 +217,12 @@ def __del__(self): | ||||||
|         key = object.__getattribute__(self, '_local__key') |         key = object.__getattribute__(self, '_local__key') | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             threads = list(threading.enumerate()) |             # We use the non-locking API since we might already hold the lock | ||||||
|  |             # (__del__ can be called at any point by the cyclic GC). | ||||||
|  |             threads = threading._enumerate() | ||||||
|         except: |         except: | ||||||
|             # If enumerate fails, as it seems to do during |             # If enumerating the current threads fails, as it seems to do | ||||||
|             # shutdown, we'll skip cleanup under the assumption |             # during shutdown, we'll skip cleanup under the assumption | ||||||
|             # that there is nothing to clean up. |             # that there is nothing to clean up. | ||||||
|             return |             return | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -798,6 +798,10 @@ def active_count(): | ||||||
| 
 | 
 | ||||||
| activeCount = active_count | activeCount = active_count | ||||||
| 
 | 
 | ||||||
|  | def _enumerate(): | ||||||
|  |     # Same as enumerate(), but without the lock. Internal use only. | ||||||
|  |     return list(_active.values()) + list(_limbo.values()) | ||||||
|  | 
 | ||||||
| def enumerate(): | def enumerate(): | ||||||
|     with _active_limbo_lock: |     with _active_limbo_lock: | ||||||
|         return list(_active.values()) + list(_limbo.values()) |         return list(_active.values()) + list(_limbo.values()) | ||||||
|  |  | ||||||
|  | @ -123,6 +123,9 @@ C-API | ||||||
| Library | Library | ||||||
| ------- | ------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #7264: Fix a possible deadlock when deallocating thread-local objects | ||||||
|  |   which are part of a reference cycle. | ||||||
|  | 
 | ||||||
| - Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent | - Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent | ||||||
|   objects on 64-bit systems.  Patch by Michael Broghton. |   objects on 64-bit systems.  Patch by Michael Broghton. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Antoine Pitrou
						Antoine Pitrou