mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	This combines and updates our freelist handling to use a consistent implementation. Objects in the freelist are linked together using the first word of memory block. If configured with freelists disabled, these operations are essentially no-ops.
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			933 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			933 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef Py_INTERNAL_OBJECT_STATE_H
 | 
						|
#define Py_INTERNAL_OBJECT_STATE_H
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef Py_BUILD_CORE
 | 
						|
#  error "this header requires Py_BUILD_CORE define"
 | 
						|
#endif
 | 
						|
 | 
						|
#include "pycore_freelist_state.h"  // _Py_freelists
 | 
						|
#include "pycore_hashtable.h"       // _Py_hashtable_t
 | 
						|
 | 
						|
struct _py_object_runtime_state {
 | 
						|
#ifdef Py_REF_DEBUG
 | 
						|
    Py_ssize_t interpreter_leaks;
 | 
						|
#endif
 | 
						|
    int _not_used;
 | 
						|
};
 | 
						|
 | 
						|
struct _py_object_state {
 | 
						|
#if !defined(Py_GIL_DISABLED)
 | 
						|
    struct _Py_freelists freelists;
 | 
						|
#endif
 | 
						|
#ifdef Py_REF_DEBUG
 | 
						|
    Py_ssize_t reftotal;
 | 
						|
#endif
 | 
						|
#ifdef Py_TRACE_REFS
 | 
						|
    // Hash table storing all objects. The key is the object pointer
 | 
						|
    // (PyObject*) and the value is always the number 1 (as uintptr_t).
 | 
						|
    // See _PyRefchain_IsTraced() and _PyRefchain_Trace() functions.
 | 
						|
    _Py_hashtable_t *refchain;
 | 
						|
#endif
 | 
						|
    int _not_used;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
#endif /* !Py_INTERNAL_OBJECT_STATE_H */
 |