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>
This commit is contained in:
Michał Górny
2021-07-28 09:27:18 +02:00
parent c832a31b3e
commit 2ff5908743
2 changed files with 106 additions and 0 deletions

View File

@@ -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

View File

@@ -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
}