[pypy-commit] pypy winconsoleio: work in progress

andrewjlawrence pypy.commits at gmail.com
Fri Sep 6 00:57:19 EDT 2019


Author: andrewjlawrence
Branch: winconsoleio
Changeset: r97383:267f37b690fc
Date: 2019-09-06 05:55 +0100
http://bitbucket.org/pypy/pypy/changeset/267f37b690fc/

Log:	work in progress

diff --git a/pypy/module/__pypy__/test/test_signal.py b/pypy/module/__pypy__/test/test_signal.py
--- a/pypy/module/__pypy__/test/test_signal.py
+++ b/pypy/module/__pypy__/test/test_signal.py
@@ -11,14 +11,6 @@
         with thread.signals_enabled:
             pass
         # assert did not crash
-
-class AppTestSigIntEvent:
-    spaceconfig = dict(usemodules=['__pypy__', 'signal'])
-
-    def test_sigint_event(self):
-        if sys.platform == 'win32':
-            pytest.skip("sigint event only on windows!")
-        import signal
         
 
 class AppTestThreadSignal(GenericTestThread):
diff --git a/pypy/module/_io/interp_win32consoleio.py b/pypy/module/_io/interp_win32consoleio.py
--- a/pypy/module/_io/interp_win32consoleio.py
+++ b/pypy/module/_io/interp_win32consoleio.py
@@ -6,7 +6,7 @@
     TypeDef, generic_new_descr, GetSetProperty)
 from pypy.interpreter.gateway import WrappedDefault, interp2app, unwrap_spec
 from pypy.module._io.interp_iobase import (W_RawIOBase, DEFAULT_BUFFER_SIZE)
-#from pypy.module.signal
+from pypy.module.signal.interp_signal import sigintevent
 from pypy.interpreter.unicodehelper import fsdecode
 from rpython.rtyper.lltypesystem import lltype, rffi
 from rpython.rlib._os_support import _preferred_traits
@@ -42,7 +42,7 @@
             with lltype.scoped_alloc(rwin32.LPDWORD.TO, -1) as n:
                 len = min(maxlen - off, BUFSIZE)
                 rwin32.SetLastError_saved(0)
-                #res = rwin32.ReadConsoleW(handle, buf[off], len, n, rffi.NULL)
+                res = rwin32.ReadConsoleW(handle, buf[off], len, n, rffi.NULL)
                 err = rwin32.GetLastError_saved()
                 if not res:
                     break
@@ -54,7 +54,7 @@
                     if err != rwin32.ERROR_OPERATION_ABORTED:
                         break
                     err = 0
-                    #hInterruptEvent
+                    hInterruptEvent = sigintevent()
     finally:
         lltype.free(buf, flavor='raw')
         
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
@@ -67,7 +67,9 @@
         else:
             space.actionflag.__class__ = interp_signal.SignalActionFlag
         # xxx yes I know the previous line is a hack
-        if sys.platform == 'win32':
+        print "loading module"
+        if os.name == "nt":
+            print "creating sigint event"
             interp_signal.create_sigint_event()
 
     def startup(self, space):
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
@@ -21,7 +21,7 @@
 WIN32 = os.name == "nt"
 
 if WIN32:
-   _sigint_event = rwin32.INVALID_HANDLE_VALUE
+   _sigint_event = rwin32.NULL_HANDLE
 
 class SignalActionFlag(AbstractActionFlag):
     # This class uses the C-level pypysig_counter variable as the tick
@@ -440,7 +440,7 @@
                                        rffi.NULL)
 
 def sigintevent(space):
-    if _sigint_event == rwin32.INVALID_HANDLE_VALUE:
-        return space.newint(-1)
+    if _sigint_event == rwin32.NULL_HANDLE:
+        return space.newint(0)
     else:
         return space.newint(_sigint_event)
\ No newline at end of file
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
@@ -271,6 +271,17 @@
             else:
                 raise AssertionError("did not raise!")
 
+    def test_sigint_event(self):
+        import os
+        if os.name != 'nt':
+            pytest.skip("sigint event only on windows!")
+        import _signal
+        sigevent = _signal.sigintevent()
+        assert sigevent == 0
+        _signal.__init__()
+        sigevent = _signal.sigintevent()
+        assert sigevent >= 0
+
 
 class AppTestSignalSocket:
     spaceconfig = dict(usemodules=['signal', '_socket'])


More information about the pypy-commit mailing list