[pypy-svn] r79861 - pypy/branch/fast-forward/pypy/module/signal

afa at codespeak.net afa at codespeak.net
Tue Dec 7 00:34:53 CET 2010


Author: afa
Date: Tue Dec  7 00:34:52 2010
New Revision: 79861

Modified:
   pypy/branch/fast-forward/pypy/module/signal/__init__.py
   pypy/branch/fast-forward/pypy/module/signal/interp_signal.py
Log:
Implement signal.siginterrupt()


Modified: pypy/branch/fast-forward/pypy/module/signal/__init__.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/signal/__init__.py	(original)
+++ pypy/branch/fast-forward/pypy/module/signal/__init__.py	Tue Dec  7 00:34:52 2010
@@ -15,6 +15,7 @@
     if os.name == 'posix':
         interpleveldefs['alarm'] = 'interp_signal.alarm'
         interpleveldefs['pause'] = 'interp_signal.pause'
+        interpleveldefs['siginterrupt'] = 'interp_signal.siginterrupt'
 
     appleveldefs = {
         'default_int_handler': 'app_signal.default_int_handler',

Modified: pypy/branch/fast-forward/pypy/module/signal/interp_signal.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/signal/interp_signal.py	(original)
+++ pypy/branch/fast-forward/pypy/module/signal/interp_signal.py	Tue Dec  7 00:34:52 2010
@@ -7,7 +7,7 @@
 from pypy.translator.tool.cbuild import ExternalCompilationInfo
 import py
 from pypy.tool import autopath
-from pypy.rlib import jit
+from pypy.rlib import jit, rposix
 from pypy.rlib.rarithmetic import intmask
 
 def setup():
@@ -53,6 +53,7 @@
                                     pure_function=True)
 c_alarm = external('alarm', [rffi.INT], rffi.INT)
 c_pause = external('pause', [], rffi.INT)
+c_siginterrupt = external('siginterrupt', [rffi.INT, rffi.INT], rffi.INT)
 
 
 class SignalActionFlag(AbstractActionFlag):
@@ -244,3 +245,10 @@
     old_fd = pypysig_set_wakeup_fd(fd)
     return space.wrap(intmask(old_fd))
 set_wakeup_fd.unwrap_spec = [ObjSpace, int]
+
+def siginterrupt(space, signum, flag):
+    check_signum(space, signum)
+    if rffi.cast(lltype.Signed, c_siginterrupt(signum, flag)) < 0:
+        errno = rposix.get_errno()
+        raise OperationError(space.w_RuntimeError, space.wrap(errno))
+siginterrupt.unwrap_spec = [ObjSpace, int, int]



More information about the Pypy-commit mailing list