commit:     1c62f2e44056fd5e741cdff56e3983352b2a668c
Author:     YiFei Zhu <zhuyifei1999 <AT> gmail <DOT> com>
AuthorDate: Mon May 22 23:12:54 2023 +0000
Commit:     YiFei Zhu <zhuyifei1999 <AT> gmail <DOT> com>
CommitDate: Mon May 22 23:14:35 2023 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=1c62f2e4

dev-python/guppy3: Fix assertion on USE=debug

Applied patch upstream.

Closes: https://bugs.gentoo.org/906937
Signed-off-by: YiFei Zhu <zhuyifei1999 <AT> gmail.com>

 .../files/guppy3-3.1.3-py311-refcount-assert.patch | 44 ++++++++++++++++++++++
 ...{guppy3-3.1.3.ebuild => guppy3-3.1.3-r1.ebuild} |  4 ++
 2 files changed, 48 insertions(+)

diff --git a/dev-python/guppy3/files/guppy3-3.1.3-py311-refcount-assert.patch 
b/dev-python/guppy3/files/guppy3-3.1.3-py311-refcount-assert.patch
new file mode 100644
index 000000000..8a8840d55
--- /dev/null
+++ b/dev-python/guppy3/files/guppy3-3.1.3-py311-refcount-assert.patch
@@ -0,0 +1,44 @@
+From 71f3455f73eedef78ccf79c17ed5adbb36d11eeb Mon Sep 17 00:00:00 2001
+From: YiFei Zhu <zhuyifei1...@gmail.com>
+Date: Mon, 22 May 2023 15:54:24 -0700
+Subject: [PATCH] nodegraph: Fix refcount sanity assertion for Python 3.11
+
+Python 3.11 created immortal objects whose initial refcount is
+999999999, larger than 0xa000000. This breaks the assertin here.
+
+Caught by https://bugs.gentoo.org/906937
+
+Fortunately I don't seem to need to do a new release with this fix
+because the wheels are built with -DNDEBUG.
+---
+ src/heapy/nodegraph.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/src/heapy/nodegraph.c b/src/heapy/nodegraph.c
+index 2fd9c83..765f5ee 100644
+--- a/src/heapy/nodegraph.c
++++ b/src/heapy/nodegraph.c
+@@ -148,8 +148,18 @@ NyNodeGraph_AddEdge(NyNodeGraphObject *ng, PyObject *src, 
PyObject *tgt)
+         ng->edges[ng->used_size-1].tgt == tgt)
+         return 0;
+ 
+-    assert(Py_REFCNT(src) < 0xa000000 && (Py_uintptr_t)Py_TYPE(src) > 0x1000);
+-    assert(Py_REFCNT(tgt) < 0xa000000 && (Py_uintptr_t)Py_TYPE(tgt) > 0x1000);
++#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 11
++    /* Py >= 3.11 _PyObject_IMMORTAL_INIT sets initial refcount of 999999999 
*/
++    assert((Py_uintptr_t)Py_TYPE(src) > 0x1000 &&
++            (Py_REFCNT(src) < 0xa000000 ||
++             (Py_REFCNT(src) >= 999999999 && Py_REFCNT(src) < 999999999 + 
0xa000000)));
++    assert((Py_uintptr_t)Py_TYPE(tgt) > 0x1000 &&
++            (Py_REFCNT(tgt) < 0xa000000 ||
++             (Py_REFCNT(tgt) >= 999999999 && Py_REFCNT(tgt) < 999999999 + 
0xa000000)));
++#else
++    assert((Py_uintptr_t)Py_TYPE(src) > 0x1000 && Py_REFCNT(src) < 0xa000000);
++    assert((Py_uintptr_t)Py_TYPE(tgt) > 0x1000 && Py_REFCNT(tgt) < 0xa000000);
++#endif
+ 
+     if (ng->used_size >= ng->allo_size) {
+         Py_ssize_t allo = roundupsize(ng->used_size + 1);
+-- 
+2.40.1
+

diff --git a/dev-python/guppy3/guppy3-3.1.3.ebuild 
b/dev-python/guppy3/guppy3-3.1.3-r1.ebuild
similarity index 88%
rename from dev-python/guppy3/guppy3-3.1.3.ebuild
rename to dev-python/guppy3/guppy3-3.1.3-r1.ebuild
index cadaab1a5..fc3048258 100644
--- a/dev-python/guppy3/guppy3-3.1.3.ebuild
+++ b/dev-python/guppy3/guppy3-3.1.3-r1.ebuild
@@ -18,6 +18,10 @@ LICENSE="MIT"
 SLOT="0"
 KEYWORDS="~amd64 ~x86"
 
+PATCHES=(
+       "${FILESDIR}"/guppy3-3.1.3-py311-refcount-assert.patch
+)
+
 python_test() {
        cd "${T}" || die
        "${EPYTHON}" "${S}"/guppy/heapy/test/test_all.py || die

Reply via email to