Skip to content

Commit ae2f355

Browse files
erlend-aaslandvstinner
authored andcommitted
gh-85283: Add PyMem_RawMalloc() to the limited C API
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.
1 parent 2c23419 commit ae2f355

File tree

8 files changed

+38
-6
lines changed

8 files changed

+38
-6
lines changed

Doc/data/stable_abi.dat

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Doc/whatsnew/3.13.rst

+4
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,10 @@ New Features
977977
references) now supports the :ref:`Limited API <limited-c-api>`.
978978
(Contributed by Victor Stinner in :gh:`108634`.)
979979

980+
* Add :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawCalloc`,
981+
:c:func:`PyMem_RawRealloc` and :c:func:`PyMem_RawFree` to the limited C API.
982+
(Contributed by Victor Stinner in :gh:`85283`.)
983+
980984
Porting to Python 3.13
981985
----------------------
982986

Include/cpython/pymem.h

-6
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
# error "this header file must not be included directly"
33
#endif
44

5-
PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size);
6-
PyAPI_FUNC(void *) PyMem_RawCalloc(size_t nelem, size_t elsize);
7-
PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size);
8-
PyAPI_FUNC(void) PyMem_RawFree(void *ptr);
9-
10-
115
typedef enum {
126
/* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */
137
PYMEM_DOMAIN_RAW,

Include/pymem.h

+11
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
8787
#define PyMem_DEL(p) PyMem_Free((p))
8888

8989

90+
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000
91+
// Memory allocator which doesn't require the GIL to be held.
92+
// Usually, it's just a thin wrapper to functions of the standard C library:
93+
// malloc(), calloc(), realloc() and free(). The difference is that
94+
// tracemalloc can track these memory allocations.
95+
PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size);
96+
PyAPI_FUNC(void *) PyMem_RawCalloc(size_t nelem, size_t elsize);
97+
PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size);
98+
PyAPI_FUNC(void) PyMem_RawFree(void *ptr);
99+
#endif
100+
90101
#ifndef Py_LIMITED_API
91102
# define Py_CPYTHON_PYMEM_H
92103
# include "cpython/pymem.h"

Lib/test/test_stable_abi_ctypes.py

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Add :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawCalloc`,
2+
:c:func:`PyMem_RawRealloc` and :c:func:`PyMem_RawFree` to the limited C API.
3+
Patch by Victor Stinner.

Misc/stable_abi.toml

+8
Original file line numberDiff line numberDiff line change
@@ -2464,3 +2464,11 @@
24642464
added = '3.13'
24652465
[function.PyMapping_HasKeyStringWithError]
24662466
added = '3.13'
2467+
[function.PyMem_RawMalloc]
2468+
added = '3.13'
2469+
[function.PyMem_RawCalloc]
2470+
added = '3.13'
2471+
[function.PyMem_RawRealloc]
2472+
added = '3.13'
2473+
[function.PyMem_RawFree]
2474+
added = '3.13'

PC/python3dll.c

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)