gh-85283: Add PyMem_RawMalloc() to the limited C API (#108570)

Add PyMem_RawMalloc(), PyMem_RawCalloc(), PyMem_RawRealloc() and
PyMem_RawFree() to the limited C API.

These functions were added by Python 3.4 and are needed to port
stdlib extensions to the limited C API, like grp and pwd.

Co-authored-by: Erlend E. Aasland <erlend@python.org>
This commit is contained in:
Victor Stinner 2023-10-17 02:41:51 +02:00 committed by GitHub
parent cf9c25c719
commit cc71cc9256
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 39 additions and 6 deletions

View File

@ -388,6 +388,10 @@ function,PyMapping_Values,3.2,,
function,PyMem_Calloc,3.7,, function,PyMem_Calloc,3.7,,
function,PyMem_Free,3.2,, function,PyMem_Free,3.2,,
function,PyMem_Malloc,3.2,, function,PyMem_Malloc,3.2,,
function,PyMem_RawCalloc,3.13,,
function,PyMem_RawFree,3.13,,
function,PyMem_RawMalloc,3.13,,
function,PyMem_RawRealloc,3.13,,
function,PyMem_Realloc,3.2,, function,PyMem_Realloc,3.2,,
type,PyMemberDef,3.2,,full-abi type,PyMemberDef,3.2,,full-abi
var,PyMemberDescr_Type,3.2,, var,PyMemberDescr_Type,3.2,,

View File

@ -1053,6 +1053,11 @@ New Features
parameter names. parameter names.
(Contributed by Serhiy Storchaka in :gh:`110815`.) (Contributed by Serhiy Storchaka in :gh:`110815`.)
* Add :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawCalloc`,
:c:func:`PyMem_RawRealloc` and :c:func:`PyMem_RawFree` to the limited C API
(version 3.13).
(Contributed by Victor Stinner in :gh:`85283`.)
Porting to Python 3.13 Porting to Python 3.13
---------------------- ----------------------

View File

@ -2,12 +2,6 @@
# error "this header file must not be included directly" # error "this header file must not be included directly"
#endif #endif
PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size);
PyAPI_FUNC(void *) PyMem_RawCalloc(size_t nelem, size_t elsize);
PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size);
PyAPI_FUNC(void) PyMem_RawFree(void *ptr);
typedef enum { typedef enum {
/* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */ /* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */
PYMEM_DOMAIN_RAW, PYMEM_DOMAIN_RAW,

View File

@ -87,6 +87,17 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
#define PyMem_DEL(p) PyMem_Free((p)) #define PyMem_DEL(p) PyMem_Free((p))
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000
// Memory allocator which doesn't require the GIL to be held.
// Usually, it's just a thin wrapper to functions of the standard C library:
// malloc(), calloc(), realloc() and free(). The difference is that
// tracemalloc can track these memory allocations.
PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size);
PyAPI_FUNC(void *) PyMem_RawCalloc(size_t nelem, size_t elsize);
PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size);
PyAPI_FUNC(void) PyMem_RawFree(void *ptr);
#endif
#ifndef Py_LIMITED_API #ifndef Py_LIMITED_API
# define Py_CPYTHON_PYMEM_H # define Py_CPYTHON_PYMEM_H
# include "cpython/pymem.h" # include "cpython/pymem.h"

View File

@ -418,6 +418,10 @@ SYMBOL_NAMES = (
"PyMem_Calloc", "PyMem_Calloc",
"PyMem_Free", "PyMem_Free",
"PyMem_Malloc", "PyMem_Malloc",
"PyMem_RawCalloc",
"PyMem_RawFree",
"PyMem_RawMalloc",
"PyMem_RawRealloc",
"PyMem_Realloc", "PyMem_Realloc",
"PyMemberDescr_Type", "PyMemberDescr_Type",
"PyMember_GetOne", "PyMember_GetOne",

View File

@ -0,0 +1,3 @@
Add :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawCalloc`,
:c:func:`PyMem_RawRealloc` and :c:func:`PyMem_RawFree` to the limited C API.
Patch by Victor Stinner.

View File

@ -2466,3 +2466,11 @@
added = '3.13' added = '3.13'
[function.PyUnicode_EqualToUTF8AndSize] [function.PyUnicode_EqualToUTF8AndSize]
added = '3.13' added = '3.13'
[function.PyMem_RawMalloc]
added = '3.13'
[function.PyMem_RawCalloc]
added = '3.13'
[function.PyMem_RawRealloc]
added = '3.13'
[function.PyMem_RawFree]
added = '3.13'

4
PC/python3dll.c generated
View File

@ -373,6 +373,10 @@ EXPORT_FUNC(PyMarshal_WriteObjectToString)
EXPORT_FUNC(PyMem_Calloc) EXPORT_FUNC(PyMem_Calloc)
EXPORT_FUNC(PyMem_Free) EXPORT_FUNC(PyMem_Free)
EXPORT_FUNC(PyMem_Malloc) EXPORT_FUNC(PyMem_Malloc)
EXPORT_FUNC(PyMem_RawCalloc)
EXPORT_FUNC(PyMem_RawFree)
EXPORT_FUNC(PyMem_RawMalloc)
EXPORT_FUNC(PyMem_RawRealloc)
EXPORT_FUNC(PyMem_Realloc) EXPORT_FUNC(PyMem_Realloc)
EXPORT_FUNC(PyMember_GetOne) EXPORT_FUNC(PyMember_GetOne)
EXPORT_FUNC(PyMember_SetOne) EXPORT_FUNC(PyMember_SetOne)