]> granicus.if.org Git - python/commitdiff
bpo-35053: Add Include/tracemalloc.h (GH-10091)
authorVictor Stinner <vstinner@redhat.com>
Thu, 25 Oct 2018 13:54:13 +0000 (15:54 +0200)
committerGitHub <noreply@github.com>
Thu, 25 Oct 2018 13:54:13 +0000 (15:54 +0200)
* 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.

Include/Python.h
Include/object.h
Include/pymem.h
Include/tracemalloc.h [new file with mode: 0644]
Makefile.pre.in
PCbuild/pythoncore.vcxproj
PCbuild/pythoncore.vcxproj.filters

index 1bac5bd542877e6c5b94144bcb1de825f8dc7dc8..80200feb9033ea07054ba25780607a10551a23b2 100644 (file)
 #include "dtoa.h"
 #include "fileutils.h"
 #include "pyfpe.h"
+#include "tracemalloc.h"
 
 #endif /* !Py_PYTHON_H */
index 8cd57d21a40fc0333449289d88aefb38e1e2c4c9..c0371c829067be0d1a19a1a07bd0976504bf24f8 100644 (file)
@@ -1,5 +1,8 @@
 #ifndef Py_OBJECT_H
 #define Py_OBJECT_H
+
+#include "pymem.h"   /* _Py_tracemalloc_config */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
index 6299ab405a0506b57b4cb532c0095ab96b68a108..e993628a21ee849b657d6ea355dac51449324f56 100644 (file)
@@ -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 (file)
index 0000000..cf5bb54
--- /dev/null
@@ -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 */
index 333ab9b38240f20ace07488fbda1882de1740354..61b469d4504eb36db101374d8ea32a189081116a 100644 (file)
@@ -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 \
index 4a05d590be5c51f8594e5cec5bde61d9262c801d..cb835390ee1382c87eeaa71e41e65e5fd57ef721 100644 (file)
     <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" />
index 25b1011340a29ac86501b21dfb9c5eb266865e70..510a9c2b2e4e100058e7cc0d069bd5e8b4e596e1 100644 (file)
     <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>