mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	Enhance documentation on malloc debug hooks
Issue #26564, #26516, #26563.
This commit is contained in:
		
							parent
							
								
									3ca3342307
								
							
						
					
					
						commit
						c2fc56836f
					
				
					 3 changed files with 20 additions and 11 deletions
				
			
		| 
						 | 
					@ -346,8 +346,9 @@ Customize Memory Allocators
 | 
				
			||||||
   - Detect write before the start of the buffer (buffer underflow)
 | 
					   - Detect write before the start of the buffer (buffer underflow)
 | 
				
			||||||
   - Detect write after the end of the buffer (buffer overflow)
 | 
					   - Detect write after the end of the buffer (buffer overflow)
 | 
				
			||||||
   - Check that the :term:`GIL <global interpreter lock>` is held when
 | 
					   - Check that the :term:`GIL <global interpreter lock>` is held when
 | 
				
			||||||
     allocator functions of the :c:data:`PYMEM_DOMAIN_OBJ` domain (ex:
 | 
					     allocator functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex:
 | 
				
			||||||
     :c:func:`PyObject_Malloc`) are called
 | 
					     :c:func:`PyObject_Malloc`) and :c:data:`PYMEM_DOMAIN_MEM` (ex:
 | 
				
			||||||
 | 
					     :c:func:`PyMem_Malloc`) domains are called
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   On error, the debug hooks use the :mod:`tracemalloc` module to get the
 | 
					   On error, the debug hooks use the :mod:`tracemalloc` module to get the
 | 
				
			||||||
   traceback where a memory block was allocated. The traceback is only
 | 
					   traceback where a memory block was allocated. The traceback is only
 | 
				
			||||||
| 
						 | 
					@ -361,7 +362,9 @@ Customize Memory Allocators
 | 
				
			||||||
   .. versionchanged:: 3.6
 | 
					   .. versionchanged:: 3.6
 | 
				
			||||||
      This function now also works on Python compiled in release mode.
 | 
					      This function now also works on Python compiled in release mode.
 | 
				
			||||||
      On error, the debug hooks now use :mod:`tracemalloc` to get the traceback
 | 
					      On error, the debug hooks now use :mod:`tracemalloc` to get the traceback
 | 
				
			||||||
      where a memory block was allocated.
 | 
					      where a memory block was allocated. The debug hooks now also check
 | 
				
			||||||
 | 
					      if the GIL is hold when functions of :c:data:`PYMEM_DOMAIN_OBJ` and
 | 
				
			||||||
 | 
					      :c:data:`PYMEM_DOMAIN_MEM` domains are called.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _pymalloc:
 | 
					.. _pymalloc:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -638,16 +638,20 @@ conflict.
 | 
				
			||||||
   Install debug hooks:
 | 
					   Install debug hooks:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   * ``debug``: install debug hooks on top of the default memory allocator
 | 
					   * ``debug``: install debug hooks on top of the default memory allocator
 | 
				
			||||||
   * ``malloc_debug``: same than ``malloc`` but also install debug hooks
 | 
					   * ``malloc_debug``: same as ``malloc`` but also install debug hooks
 | 
				
			||||||
   * ``pymalloc_debug``: same than ``malloc`` but also install debug hooks
 | 
					   * ``pymalloc_debug``: same as ``pyalloc`` but also install debug hooks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   When is compiled in release mode, the default is ``pymalloc``. When Python
 | 
				
			||||||
 | 
					   is compiled in debug mode, the default is ``pymalloc_debug``: debug hooks
 | 
				
			||||||
 | 
					   are installed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   If Python is configured without ``pymalloc`` support, ``pymalloc`` and
 | 
				
			||||||
 | 
					   ``pymalloc_debug`` are not available, the default is ``malloc`` in release
 | 
				
			||||||
 | 
					   mode and ``malloc_debug`` in debug mode.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
 | 
					   See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
 | 
				
			||||||
   memory allocators.
 | 
					   memory allocators.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   .. note::
 | 
					 | 
				
			||||||
      ``pymalloc`` and ``pymalloc_debug`` are not available if Python is
 | 
					 | 
				
			||||||
      configured without ``pymalloc`` support.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   .. versionadded:: 3.6
 | 
					   .. versionadded:: 3.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,8 +118,10 @@ compiled in release mode using ``PYTHONMALLOC=debug``. Effects of debug hooks:
 | 
				
			||||||
* Detect write before the start of the buffer (buffer underflow)
 | 
					* Detect write before the start of the buffer (buffer underflow)
 | 
				
			||||||
* Detect write after the end of the buffer (buffer overflow)
 | 
					* Detect write after the end of the buffer (buffer overflow)
 | 
				
			||||||
* Check that the :term:`GIL <global interpreter lock>` is held when allocator
 | 
					* Check that the :term:`GIL <global interpreter lock>` is held when allocator
 | 
				
			||||||
  functions of the :c:data:`PYMEM_DOMAIN_OBJ` domain (ex:
 | 
					  functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and
 | 
				
			||||||
  :c:func:`PyObject_Malloc`) are called
 | 
					  :c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Checking if the GIL is hold is also a new feature of Python 3.6.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
 | 
					See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
 | 
				
			||||||
memory allocators.
 | 
					memory allocators.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue