mirror of https://github.com/python/cpython
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:
parent
cf9c25c719
commit
cc71cc9256
|
@ -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,,
|
||||||
|
|
|
@ -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
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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.
|
|
@ -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'
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue