Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.3
Changeset: r75232:6a4993eee75c
Date: 2015-01-04 19:04 +0100
http://bitbucket.org/pypy/pypy/changeset/6a4993eee75c/
Log: Add signal.sigpending()
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
@@ -27,6 +27,7 @@
if os.name == 'posix':
interpleveldefs['sigwait'] = 'interp_signal.sigwait'
+ interpleveldefs['sigpending'] = 'interp_signal.sigpending'
interpleveldefs['pthread_kill'] = 'interp_signal.pthread_kill'
interpleveldefs['pthread_sigmask'] = 'interp_signal.pthread_sigmask'
interpleveldefs['SIG_BLOCK'] = 'space.wrap(interp_signal.SIG_BLOCK)'
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
@@ -383,6 +383,13 @@
signum = signum_ptr[0]
return space.wrap(signum)
+def sigpending(space):
+ with lltype.scoped_alloc(c_sigset_t.TO) as mask:
+ ret = c_sigpending(mask)
+ if ret != 0:
+ raise exception_from_errno(space, space.w_OSError)
+ return _sigset_to_signals(space, mask)
+
@unwrap_spec(how=int)
def pthread_sigmask(space, how, w_signals):
with SignalMask(space, w_signals) as sigset:
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
@@ -355,5 +355,7 @@
signal.pthread_sigmask(signal.SIG_BLOCK, (signum1, signum2))
posix.kill(posix.getpid(), signum1)
posix.kill(posix.getpid(), signum2)
+ assert signal.sigpending() == set((signum1, signum2))
# Unblocking the 2 signals calls the C signal handler twice
signal.pthread_sigmask(signal.SIG_UNBLOCK, (signum1, signum2))
+ assert signal.sigpending() == set()
diff --git a/rpython/rlib/rsignal.py b/rpython/rlib/rsignal.py
--- a/rpython/rlib/rsignal.py
+++ b/rpython/rlib/rsignal.py
@@ -107,5 +107,6 @@
c_sigaddset = external('sigaddset', [c_sigset_t, rffi.INT], rffi.INT)
c_sigismember = external('sigismember', [c_sigset_t, rffi.INT], rffi.INT)
c_sigwait = external('sigwait', [c_sigset_t, rffi.INTP], rffi.INT)
+ c_sigpending = external('sigpending', [c_sigset_t], rffi.INT)
c_pthread_sigmask = external('pthread_sigmask',
[rffi.INT, c_sigset_t, c_sigset_t], rffi.INT)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit