mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	gh-112529: Make the GC scheduling thread-safe (#114880)
The GC keeps track of the number of allocations (less deallocations) since the last GC. This buffers the count in thread-local state and uses atomic operations to modify the per-interpreter count. The thread-local buffering avoids contention on shared state. A consequence is that the GC scheduling is not as precise, so "test_sneaky_frame_object" is skipped because it requires that the GC be run exactly after allocating a frame object.
This commit is contained in:
		
							parent
							
								
									f92857a930
								
							
						
					
					
						commit
						b24c9161a6
					
				
					 7 changed files with 71 additions and 16 deletions
				
			
		|  | @ -1835,6 +1835,8 @@ _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems) | |||
|     if (presize) { | ||||
|         ((PyObject **)alloc)[0] = NULL; | ||||
|         ((PyObject **)alloc)[1] = NULL; | ||||
|     } | ||||
|     if (PyType_IS_GC(type)) { | ||||
|         _PyObject_GC_Link(obj); | ||||
|     } | ||||
|     memset(obj, '\0', size); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Gross
						Sam Gross