Skip to content

Commit

Permalink
gh-96997: Clarify the contract of PyMem_SetAllocator() (GH-98977)
Browse files Browse the repository at this point in the history
(cherry picked from commit c053284)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
  • Loading branch information
miss-islington and pablogsal authored Nov 2, 2022
1 parent 0774f83 commit 6cf30c6
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions Doc/c-api/memory.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ for the I/O buffer escapes completely the Python memory manager.
Allocator Domains
=================

.. _allocator-domains:

All allocating functions belong to one of three different "domains" (see also
:c:type:`PyMemAllocatorDomain`). These domains represent different allocation
strategies and are optimized for different purposes. The specific details on
Expand Down Expand Up @@ -477,6 +479,25 @@ Customize Memory Allocators
debug hooks on top on the new allocator.
.. warning::
:c:func:`PyMem_SetAllocator` does have the following contract:
* It can be called after :c:func:`Py_PreInitialize` and before
:c:func:`Py_InitializeFromConfig` to install a custom memory
allocator. There are no restrictions over the installed allocator
other than the ones imposed by the domain (for instance, the Raw
Domain allows the allocator to be called without the GIL held). See
:ref:`the section on allocator domains <allocator-domains>` for more
information.
* If called after Python has finish initializing (after
:c:func:`Py_InitializeFromConfig` has been called) the allocator
**must** wrap the existing allocator. Substituting the current
allocator for some other arbitrary one is **not supported**.
.. c:function:: void PyMem_SetupDebugHooks(void)
Setup :ref:`debug hooks in the Python memory allocators <pymem-debug-hooks>`
Expand Down

0 comments on commit 6cf30c6

Please sign in to comment.