]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-85283: Add PyMem_RawMalloc() to the limited C API (#108570)
authorVictor Stinner <vstinner@python.org>
Tue, 17 Oct 2023 00:41:51 +0000 (02:41 +0200)
committerGitHub <noreply@github.com>
Tue, 17 Oct 2023 00:41:51 +0000 (02:41 +0200)
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>
Doc/data/stable_abi.dat
Doc/whatsnew/3.13.rst
Include/cpython/pymem.h
Include/pymem.h
Lib/test/test_stable_abi_ctypes.py
Misc/NEWS.d/next/C API/2023-08-28-17-34-10.gh-issue-85283.f1zXcc.rst [new file with mode: 0644]
Misc/stable_abi.toml
PC/python3dll.c

index 6ec9c907254b04c0075f295689896e4016a311bc..267d2b8c010cacd2ff06f5f70733975bcb3ad30e 100644 (file)
@@ -388,6 +388,10 @@ function,PyMapping_Values,3.2,,
 function,PyMem_Calloc,3.7,,
 function,PyMem_Free,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,,
 type,PyMemberDef,3.2,,full-abi
 var,PyMemberDescr_Type,3.2,,
index 01f8208f3af3eabc3296d4adc010ca0e9c290535..ec76659bee6ae48562fe2c88557dcecc20c4620e 100644 (file)
@@ -1053,6 +1053,11 @@ New Features
   parameter names.
   (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
 ----------------------
 
index b75f1c4d2425dd889825de22215b9f22db103eea..dc4a65ccf8d985ab37f0a6e980f01172798926bd 100644 (file)
@@ -2,12 +2,6 @@
 #  error "this header file must not be included directly"
 #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 {
     /* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */
     PYMEM_DOMAIN_RAW,
index 68e33f90b7b9134d21818ca6c0249d8b539dad73..a80da99e1dd7fc5710e22f780e75111e0c12f21b 100644 (file)
@@ -87,6 +87,17 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
 #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
 #  define Py_CPYTHON_PYMEM_H
 #  include "cpython/pymem.h"
index e06f9cabf4366bc2490c62ddc6644d96b8e21ded..0c831c4f478a61e38e444dcaed7dc63589b0e45b 100644 (file)
@@ -418,6 +418,10 @@ SYMBOL_NAMES = (
     "PyMem_Calloc",
     "PyMem_Free",
     "PyMem_Malloc",
+    "PyMem_RawCalloc",
+    "PyMem_RawFree",
+    "PyMem_RawMalloc",
+    "PyMem_RawRealloc",
     "PyMem_Realloc",
     "PyMemberDescr_Type",
     "PyMember_GetOne",
diff --git a/Misc/NEWS.d/next/C API/2023-08-28-17-34-10.gh-issue-85283.f1zXcc.rst b/Misc/NEWS.d/next/C API/2023-08-28-17-34-10.gh-issue-85283.f1zXcc.rst
new file mode 100644 (file)
index 0000000..1c25fdb
--- /dev/null
@@ -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.
index 9d66b92eb8edf06675da3c43fff162a9c767b95d..f8ee973612e7ef18030b7367cd9bae94a084a16c 100644 (file)
     added = '3.13'
 [function.PyUnicode_EqualToUTF8AndSize]
     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'
index 7ee11746770442c6cdcfb8eb88416f33d881a0e0..dd3be3a7490b99cc87364f5b1ae59aa589940249 100755 (executable)
@@ -373,6 +373,10 @@ EXPORT_FUNC(PyMarshal_WriteObjectToString)
 EXPORT_FUNC(PyMem_Calloc)
 EXPORT_FUNC(PyMem_Free)
 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(PyMember_GetOne)
 EXPORT_FUNC(PyMember_SetOne)