forked from pool/python-stopit
Add python-stopit-ulong-for-thread-id.patch: Use ulong for thread id on Python >= 3.7, upstream commit dda4bd1 (gh#glenfant/stopit#31).
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-stopit?expand=0&rev=2
This commit is contained in:
47
python-stopit-ulong-for-thread-id.patch
Normal file
47
python-stopit-ulong-for-thread-id.patch
Normal file
@@ -0,0 +1,47 @@
|
||||
From 0da7f4fb26b25e5ed1d35dbce43e2e8bc4ca494a Mon Sep 17 00:00:00 2001
|
||||
From: Antti Kajander <kajaste@users.noreply.github.com>
|
||||
Date: Sat, 18 Nov 2023 02:02:38 +0200
|
||||
Subject: [PATCH] Use ulong for thread id on Python >= 3.7
|
||||
|
||||
As per https://docs.python.org/3/c-api/init.html#c.PyThreadState_SetAsyncExc
|
||||
---
|
||||
src/stopit/threadstop.py | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/stopit/threadstop.py b/src/stopit/threadstop.py
|
||||
index 37ecb92..a991750 100644
|
||||
--- a/src/stopit/threadstop.py
|
||||
+++ b/src/stopit/threadstop.py
|
||||
@@ -9,10 +9,16 @@
|
||||
"""
|
||||
|
||||
import ctypes
|
||||
+import sys
|
||||
import threading
|
||||
|
||||
from .utils import TimeoutException, BaseTimeout, base_timeoutable
|
||||
|
||||
+if sys.version_info < (3, 7):
|
||||
+ tid_ctype = ctypes.c_long
|
||||
+else:
|
||||
+ tid_ctype = ctypes.c_ulong
|
||||
+
|
||||
|
||||
def async_raise(target_tid, exception):
|
||||
"""Raises an asynchronous exception in another thread.
|
||||
@@ -24,13 +30,13 @@ def async_raise(target_tid, exception):
|
||||
"""
|
||||
# Ensuring and releasing GIL are useless since we're not in C
|
||||
# gil_state = ctypes.pythonapi.PyGILState_Ensure()
|
||||
- ret = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(target_tid),
|
||||
+ ret = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid_ctype(target_tid),
|
||||
ctypes.py_object(exception))
|
||||
# ctypes.pythonapi.PyGILState_Release(gil_state)
|
||||
if ret == 0:
|
||||
raise ValueError("Invalid thread ID {}".format(target_tid))
|
||||
elif ret > 1:
|
||||
- ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(target_tid), None)
|
||||
+ ctypes.pythonapi.PyThreadState_SetAsyncExc(tid_ctype(target_tid), None)
|
||||
raise SystemError("PyThreadState_SetAsyncExc failed")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user