[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