]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.10] gh-94841: Ensure arena_map_get() is inlined in PyObject_Free() (GH-94842)
authorNeil Schemenauer <nas-github@arctrix.com>
Fri, 15 Jul 2022 00:26:40 +0000 (17:26 -0700)
committerGitHub <noreply@github.com>
Fri, 15 Jul 2022 00:26:40 +0000 (17:26 -0700)
Need to define ALWAYS_INLINE macro for 3.10.

Co-authored-by: neonene <53406459+neonene@users.noreply.github.com>
Misc/NEWS.d/next/Build/2022-07-14-02-45-44.gh-issue-94841.lLRTdf.rst [new file with mode: 0644]
Objects/obmalloc.c

diff --git a/Misc/NEWS.d/next/Build/2022-07-14-02-45-44.gh-issue-94841.lLRTdf.rst b/Misc/NEWS.d/next/Build/2022-07-14-02-45-44.gh-issue-94841.lLRTdf.rst
new file mode 100644 (file)
index 0000000..f7ad4f8
--- /dev/null
@@ -0,0 +1 @@
+Fix the possible performance regression of :c:func:`PyObject_Free` compiled with MSVC version 1932.
index 615703a963ede62e56879255248602196eaeacac..ed8dd5a5042d5dda389698d49f73316c9cb5a0d7 100644 (file)
@@ -1397,9 +1397,19 @@ static int arena_map_bot_count;
 static arena_map_bot_t arena_map_root;
 #endif
 
+#if defined(Py_DEBUG)
+#  define ALWAYS_INLINE
+#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
+#  define ALWAYS_INLINE __attribute__((always_inline))
+#elif defined(_MSC_VER)
+#  define ALWAYS_INLINE __forceinline
+#else
+#  define ALWAYS_INLINE
+#endif
+
 /* Return a pointer to a bottom tree node, return NULL if it doesn't exist or
  * it cannot be created */
-static arena_map_bot_t *
+static ALWAYS_INLINE arena_map_bot_t *
 arena_map_get(block *p, int create)
 {
 #ifdef USE_INTERIOR_NODES