diff options
| author | Victor Stinner <victor.stinner@gmail.com> | 2017-11-29 17:20:38 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-29 17:20:38 +0100 |
| commit | 5d39e0429029324cae90bba2f19fb689b007c7d6 (patch) | |
| tree | d414a4bc635c750d07c93d94835d932d3524c062 /Modules/_testcapimodule.c | |
| parent | c15bb49d71f97d400b295d88e5b075e89cb8ba20 (diff) | |
| download | cpython-git-5d39e0429029324cae90bba2f19fb689b007c7d6.tar.gz | |
bpo-32030: Rework memory allocators (#4625)
* Fix _PyMem_SetupAllocators("debug"): always restore allocators to
the defaults, rather than only caling _PyMem_SetupDebugHooks().
* Add _PyMem_SetDefaultAllocator() helper to set the "default"
allocator.
* Add _PyMem_GetAllocatorsName(): get the name of the allocators
* main() now uses debug hooks on memory allocators if Py_DEBUG is
defined, rather than calling directly malloc()
* Document default memory allocators in C API documentation
* _Py_InitializeCore() now fails with a fatal user error if
PYTHONMALLOC value is an unknown memory allocator, instead of
failing with a fatal internal error.
* Add new tests on the PYTHONMALLOC environment variable
* Add support.with_pymalloc()
* Add the _testcapi.WITH_PYMALLOC constant and expose it as
support.with_pymalloc().
* sysconfig.get_config_var('WITH_PYMALLOC') doesn't work on Windows, so
replace it with support.with_pymalloc().
* pythoninfo: add _testcapi collector for pymem
Diffstat (limited to 'Modules/_testcapimodule.c')
| -rw-r--r-- | Modules/_testcapimodule.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 7a5771921b..4bb3e82d1d 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -4104,6 +4104,19 @@ pymem_malloc_without_gil(PyObject *self, PyObject *args) Py_RETURN_NONE; } + +static PyObject* +test_pymem_getallocatorsname(PyObject *self, PyObject *args) +{ + const char *name = _PyMem_GetAllocatorsName(); + if (name == NULL) { + PyErr_SetString(PyExc_RuntimeError, "cannot get allocators name"); + return NULL; + } + return PyUnicode_FromString(name); +} + + static PyObject* pyobject_malloc_without_gil(PyObject *self, PyObject *args) { @@ -4624,6 +4637,7 @@ static PyMethodDef TestMethods[] = { {"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS}, {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS}, {"pymem_malloc_without_gil", pymem_malloc_without_gil, METH_NOARGS}, + {"pymem_getallocatorsname", test_pymem_getallocatorsname, METH_NOARGS}, {"pyobject_malloc_without_gil", pyobject_malloc_without_gil, METH_NOARGS}, {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, {"tracemalloc_untrack", tracemalloc_untrack, METH_VARARGS}, @@ -5115,6 +5129,11 @@ PyInit__testcapi(void) PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type); PyModule_AddIntConstant(m, "the_number_three", 3); +#ifdef WITH_PYMALLOC + PyModule_AddObject(m, "WITH_PYMALLOC", Py_True); +#else + PyModule_AddObject(m, "WITH_PYMALLOC", Py_False); +#endif TestError = PyErr_NewException("_testcapi.error", NULL, NULL); Py_INCREF(TestError); |
