summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2021-07-28 09:27:18 +0200
committerMichał Górny <mgorny@gentoo.org>2021-07-28 11:19:04 +0200
commit2ff590874366fb7e656a88293e19fa4bacd2e489 (patch)
tree456146ab7eff12482204b9fc6efe092a1064e8f2
parentdev-python/pytest-xprocess: Bump to 0.18.1 (diff)
downloadgentoo-2ff590874366fb7e656a88293e19fa4bacd2e489.tar.gz
gentoo-2ff590874366fb7e656a88293e19fa4bacd2e489.tar.bz2
gentoo-2ff590874366fb7e656a88293e19fa4bacd2e489.zip
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@gentoo.org>
-rw-r--r--dev-python/uvloop/files/uvloop-0.15.3-uint64-thread-id.patch43
-rw-r--r--dev-python/uvloop/uvloop-0.15.3-r1.ebuild63
2 files changed, 106 insertions, 0 deletions
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 000000000000..a74fedd308e9
--- /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?= <mgorny@gentoo.org>
+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 000000000000..41047739fb7c
--- /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
+}