Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.3
Changeset: r75229:59d5157e77a5
Date: 2015-01-02 21:35 +0100
http://bitbucket.org/pypy/pypy/changeset/59d5157e77a5/
Log: Add signal.pthread_kill
diff --git a/pypy/module/signal/__init__.py b/pypy/module/signal/__init__.py
--- a/pypy/module/signal/__init__.py
+++ b/pypy/module/signal/__init__.py
@@ -25,6 +25,9 @@
for name in ['ITIMER_REAL', 'ITIMER_VIRTUAL', 'ITIMER_PROF']:
interpleveldefs[name] = 'space.wrap(interp_signal.%s)' % (name,)
+ if os.name == 'posix':
+ interpleveldefs['pthread_kill'] = 'interp_signal.pthread_kill'
+
appleveldefs = {
}
diff --git a/pypy/module/signal/interp_signal.py
b/pypy/module/signal/interp_signal.py
--- a/pypy/module/signal/interp_signal.py
+++ b/pypy/module/signal/interp_signal.py
@@ -328,3 +328,13 @@
c_getitimer(which, old)
return itimer_retval(space, old[0])
+
+
+@unwrap_spec(tid=int, signum=int)
+def pthread_kill(space, tid, signum):
+ "Send a signal to a thread."
+ ret = c_pthread_kill(tid, signum)
+ if ret != 0:
+ raise exception_from_errno(space, space.w_OSError)
+ # the signal may have been send to the current thread
+ space.getexecutioncontext().checksignals()
diff --git a/pypy/module/signal/test/test_signal.py
b/pypy/module/signal/test/test_signal.py
--- a/pypy/module/signal/test/test_signal.py
+++ b/pypy/module/signal/test/test_signal.py
@@ -319,3 +319,17 @@
import signal
raises(signal.ItimerError, signal.setitimer, -1, 0)
+
+class AppTestPThread:
+ spaceconfig = dict(usemodules=['signal', 'thread', 'time'])
+
+ def test_pthread_kill(self):
+ import signal
+ import _thread
+ signum = signal.SIGUSR1
+ def handler(signum, frame):
+ 1/0
+ signal.signal(signum, handler)
+ tid = _thread.get_ident()
+ raises(ZeroDivisionError, signal.pthread_kill, tid, signum)
+
diff --git a/rpython/rlib/rsignal.py b/rpython/rlib/rsignal.py
--- a/rpython/rlib/rsignal.py
+++ b/rpython/rlib/rsignal.py
@@ -96,3 +96,5 @@
c_setitimer = external('setitimer',
[rffi.INT, itimervalP, itimervalP], rffi.INT)
c_getitimer = external('getitimer', [rffi.INT, itimervalP], rffi.INT)
+
+c_pthread_kill = external('pthread_kill', [lltype.Signed, rffi.INT], rffi.INT)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit