commit:     2ff590874366fb7e656a88293e19fa4bacd2e489
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 28 07:27:18 2021 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jul 28 09:19:04 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2ff59087

dev-python/uvloop: Attempt fixing 64-bit thread id problems

The upstream hack for 32-bit platforms seems to cause OverflowErrors
on 64-bit platforms with large Python thread identifiers (e.g. sparc).
Let's attempt reverting the patch and see how uvloop fares without it
on Gentoo-supported platforms.

Bug: https://bugs.gentoo.org/796803
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../files/uvloop-0.15.3-uint64-thread-id.patch     | 43 +++++++++++++++
 dev-python/uvloop/uvloop-0.15.3-r1.ebuild          | 63 ++++++++++++++++++++++
 2 files changed, 106 insertions(+)

diff --git a/dev-python/uvloop/files/uvloop-0.15.3-uint64-thread-id.patch 
b/dev-python/uvloop/files/uvloop-0.15.3-uint64-thread-id.patch
new file mode 100644
index 00000000000..a74fedd308e
--- /dev/null
+++ b/dev-python/uvloop/files/uvloop-0.15.3-uint64-thread-id.patch
@@ -0,0 +1,43 @@
+From 732df28f0739d84c687d3e6d81995dafa18ac775 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <[email protected]>
+Date: Wed, 28 Jul 2021 09:21:00 +0200
+Subject: [PATCH] Revert 32-bit thread ID hack
+
+Apparently the hack used to fix 32-bit platforms actually breaks 64-bit
+platforms using large thread IDs (e.g. sparc).
+
+Reverts: b5b4abb16ba558cf957cf40120dfd4937c53aea5
+---
+ uvloop/includes/stdlib.pxi | 2 +-
+ uvloop/loop.pyx            | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/uvloop/includes/stdlib.pxi b/uvloop/includes/stdlib.pxi
+index adf9806..21d69e6 100644
+--- a/uvloop/includes/stdlib.pxi
++++ b/uvloop/includes/stdlib.pxi
+@@ -135,7 +135,7 @@ cdef int ssl_SSL_ERROR_WANT_READ = ssl.SSL_ERROR_WANT_READ
+ cdef int ssl_SSL_ERROR_WANT_WRITE = ssl.SSL_ERROR_WANT_WRITE
+ cdef int ssl_SSL_ERROR_SYSCALL = ssl.SSL_ERROR_SYSCALL
+ 
+-cdef uint64_t MAIN_THREAD_ID = 
<uint64_t><int64_t>threading.main_thread().ident
++cdef uint64_t MAIN_THREAD_ID = <uint64_t>threading.main_thread().ident
+ cdef threading_Thread = threading.Thread
+ 
+ cdef int subprocess_PIPE = subprocess.PIPE
+diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx
+index d9b5aaa..96c9cde 100644
+--- a/uvloop/loop.pyx
++++ b/uvloop/loop.pyx
+@@ -707,7 +707,7 @@ cdef class Loop:
+             return
+ 
+         cdef uint64_t thread_id
+-        thread_id = <uint64_t><int64_t>PyThread_get_thread_ident()
++        thread_id = <uint64_t>PyThread_get_thread_ident()
+ 
+         if thread_id != self._thread_id:
+             raise RuntimeError(
+-- 
+2.32.0
+

diff --git a/dev-python/uvloop/uvloop-0.15.3-r1.ebuild 
b/dev-python/uvloop/uvloop-0.15.3-r1.ebuild
new file mode 100644
index 00000000000..41047739fb7
--- /dev/null
+++ b/dev-python/uvloop/uvloop-0.15.3-r1.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{8..9} )
+inherit distutils-r1
+
+DESCRIPTION="Ultra-fast implementation of asyncio event loop on top of libuv"
+HOMEPAGE="https://github.com/magicstack/uvloop";
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+KEYWORDS="~amd64"
+LICENSE="MIT"
+SLOT="0"
+IUSE="doc examples"
+
+RDEPEND=">=dev-libs/libuv-1.11.0:="
+DEPEND="${RDEPEND}"
+BDEPEND="
+       dev-python/cython[${PYTHON_USEDEP}]
+       doc? (
+               >=dev-python/alabaster-0.6.2[${PYTHON_USEDEP}]
+               dev-python/sphinx[${PYTHON_USEDEP}]
+       )
+       test? (
+               dev-python/aiohttp[${PYTHON_USEDEP}]
+               dev-python/pyopenssl[${PYTHON_USEDEP}]
+               dev-python/psutil[${PYTHON_USEDEP}]
+       )
+"
+
+distutils_enable_tests setup.py
+
+PATCHES=(
+       "${FILESDIR}"/${P}-uint64-thread-id.patch
+)
+
+python_prepare_all() {
+       cat <<EOF >> setup.cfg || die
+[build_ext]
+use-system-libuv=1
+EOF
+
+       # flake8 only
+       rm tests/test_sourcecode.py || die
+       # TODO: broken by cythonize
+       rm tests/test_cython.py || die
+       # force cythonization
+       rm uvloop/loop.c || die
+
+       distutils-r1_python_prepare_all
+}
+
+python_compile_all() {
+       use doc && esetup.py build_ext --inplace build_sphinx
+}
+
+python_install_all() {
+       use examples && dodoc -r examples
+       use doc && local HTML_DOCS=( "${BUILD_DIR}/sphinx/html/." )
+       distutils-r1_python_install_all
+}

Reply via email to