aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2018-10-25 15:54:13 +0200
committerGitHub <noreply@github.com>2018-10-25 15:54:13 +0200
commit6279c1c5003cd94b5e04e568ce3df7c4e8f1eaa3 (patch)
tree69ba9fb9c2291b19241c700a4466c136c5aeda5b
parentbpo-35053: Enhance tracemalloc to trace free lists (GH-10063) (diff)
downloadcpython-6279c1c5003cd94b5e04e568ce3df7c4e8f1eaa3.tar.gz
cpython-6279c1c5003cd94b5e04e568ce3df7c4e8f1eaa3.tar.bz2
cpython-6279c1c5003cd94b5e04e568ce3df7c4e8f1eaa3.zip
bpo-35053: Add Include/tracemalloc.h (GH-10091)
* Modify object.h to ensure that pymem.h is included, to get _Py_tracemalloc_config variable. * Move _PyTraceMalloc_XXX() functions to tracemalloc.h, they need PyObject type. Break circular dependency between pymem.h and object.h.
-rw-r--r--Include/Python.h1
-rw-r--r--Include/object.h3
-rw-r--r--Include/pymem.h40
-rw-r--r--Include/tracemalloc.h42
-rw-r--r--Makefile.pre.in1
-rw-r--r--PCbuild/pythoncore.vcxproj1
-rw-r--r--PCbuild/pythoncore.vcxproj.filters3
7 files changed, 54 insertions, 37 deletions
diff --git a/Include/Python.h b/Include/Python.h
index 1bac5bd5428..80200feb903 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -137,5 +137,6 @@
#include "dtoa.h"
#include "fileutils.h"
#include "pyfpe.h"
+#include "tracemalloc.h"
#endif /* !Py_PYTHON_H */
diff --git a/Include/object.h b/Include/object.h
index 8cd57d21a40..c0371c82906 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -1,5 +1,8 @@
#ifndef Py_OBJECT_H
#define Py_OBJECT_H
+
+#include "pymem.h" /* _Py_tracemalloc_config */
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/Include/pymem.h b/Include/pymem.h
index 6299ab405a0..e993628a21e 100644
--- a/Include/pymem.h
+++ b/Include/pymem.h
@@ -24,42 +24,6 @@ PyAPI_FUNC(int) _PyMem_SetupAllocators(const char *opt);
/* Try to get the allocators name set by _PyMem_SetupAllocators(). */
PyAPI_FUNC(const char*) _PyMem_GetAllocatorsName(void);
-/* Track an allocated memory block in the tracemalloc module.
- Return 0 on success, return -1 on error (failed to allocate memory to store
- the trace).
-
- Return -2 if tracemalloc is disabled.
-
- If memory block is already tracked, update the existing trace. */
-PyAPI_FUNC(int) PyTraceMalloc_Track(
- unsigned int domain,
- uintptr_t ptr,
- size_t size);
-
-/* Update the Python traceback of an object.
- This function can be used when a memory block is reused from a free list. */
-PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op);
-
-/* Untrack an allocated memory block in the tracemalloc module.
- Do nothing if the block was not tracked.
-
- Return -2 if tracemalloc is disabled, otherwise return 0. */
-PyAPI_FUNC(int) PyTraceMalloc_Untrack(
- unsigned int domain,
- uintptr_t ptr);
-
-/* Get the traceback where a memory block was allocated.
-
- Return a tuple of (filename: str, lineno: int) tuples.
-
- Return None if the tracemalloc module is disabled or if the memory block
- is not tracked by tracemalloc.
-
- Raise an exception and return NULL on error. */
-PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback(
- unsigned int domain,
- uintptr_t ptr);
-
PyAPI_FUNC(int) _PyMem_IsFreed(void *ptr, size_t size);
#endif /* !defined(Py_LIMITED_API) */
@@ -246,7 +210,9 @@ PyAPI_FUNC(int) _PyMem_SetDefaultAllocator(
/* bpo-35053: expose _Py_tracemalloc_config for performance:
_Py_NewReference() needs an efficient check to test if tracemalloc is
- tracing. */
+ tracing.
+
+ It has to be defined in pymem.h, before object.h is included. */
struct _PyTraceMalloc_Config {
/* Module initialized?
Variable protected by the GIL */
diff --git a/Include/tracemalloc.h b/Include/tracemalloc.h
new file mode 100644
index 00000000000..cf5bb54ea08
--- /dev/null
+++ b/Include/tracemalloc.h
@@ -0,0 +1,42 @@
+#ifndef Py_TRACEMALLOC_H
+#define Py_TRACEMALLOC_H
+
+#ifndef Py_LIMITED_API
+/* Track an allocated memory block in the tracemalloc module.
+ Return 0 on success, return -1 on error (failed to allocate memory to store
+ the trace).
+
+ Return -2 if tracemalloc is disabled.
+
+ If memory block is already tracked, update the existing trace. */
+PyAPI_FUNC(int) PyTraceMalloc_Track(
+ unsigned int domain,
+ uintptr_t ptr,
+ size_t size);
+
+/* Update the Python traceback of an object.
+ This function can be used when a memory block is reused from a free list. */
+PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op);
+
+/* Untrack an allocated memory block in the tracemalloc module.
+ Do nothing if the block was not tracked.
+
+ Return -2 if tracemalloc is disabled, otherwise return 0. */
+PyAPI_FUNC(int) PyTraceMalloc_Untrack(
+ unsigned int domain,
+ uintptr_t ptr);
+
+/* Get the traceback where a memory block was allocated.
+
+ Return a tuple of (filename: str, lineno: int) tuples.
+
+ Return None if the tracemalloc module is disabled or if the memory block
+ is not tracked by tracemalloc.
+
+ Raise an exception and return NULL on error. */
+PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback(
+ unsigned int domain,
+ uintptr_t ptr);
+#endif
+
+#endif /* !Py_TRACEMALLOC_H */
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 333ab9b3824..61b469d4504 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -1017,6 +1017,7 @@ PYTHON_HEADERS= \
$(srcdir)/Include/symtable.h \
$(srcdir)/Include/sysmodule.h \
$(srcdir)/Include/traceback.h \
+ $(srcdir)/Include/tracemalloc.h \
$(srcdir)/Include/tupleobject.h \
$(srcdir)/Include/ucnhash.h \
$(srcdir)/Include/unicodeobject.h \
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 4a05d590be5..cb835390ee1 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -177,6 +177,7 @@
<ClInclude Include="..\Include\sysmodule.h" />
<ClInclude Include="..\Include\token.h" />
<ClInclude Include="..\Include\traceback.h" />
+ <ClInclude Include="..\Include\tracemalloc.h" />
<ClInclude Include="..\Include\tupleobject.h" />
<ClInclude Include="..\Include\ucnhash.h" />
<ClInclude Include="..\Include\unicodeobject.h" />
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index 25b1011340a..510a9c2b2e4 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -321,6 +321,9 @@
<ClInclude Include="..\Include\traceback.h">
<Filter>Include</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\tracemalloc.h">
+ <Filter>Include</Filter>
+ </ClInclude>
<ClInclude Include="..\Include\tupleobject.h">
<Filter>Include</Filter>
</ClInclude>