[pypy-commit] pypy default: fix segfault on windows by SetErrorMode in rtyper tests
mattip
noreply at buildbot.pypy.org
Fri Apr 12 10:02:23 CEST 2013
Author: mattip <matti.picus at gmail.com>
Branch:
Changeset: r63270:18e164c14177
Date: 2013-04-12 10:45 +0300
http://bitbucket.org/pypy/pypy/changeset/18e164c14177/
Log: fix segfault on windows by SetErrorMode in rtyper tests
diff --git a/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py b/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
--- a/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
+++ b/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
@@ -745,14 +745,16 @@
eci = ExternalCompilationInfo(includes=['string.h'])
if sys.platform.startswith('win'):
underscore_on_windows = '_'
- # the default when writing to a invalid fd on windows is to call
- # an _invalid_parameter_handler, which by default crashes the
- # process. To fix this test, call _set_invalid_parameter_handler
- # in the setup_method, and remove it in the teardown.
- # Note that cpython before 2.7 did install an _invalid_parameter_handler,
+ # Note that cpython before 2.7 installs an _invalid_parameter_handler,
# which is why the test passes there, but this is no longer
# accepted practice.
- py.test.skip('need to set an _invalid_parameter_handler')
+ import ctypes
+ SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN
+ old_err_mode = ctypes.windll.kernel32.GetErrorMode()
+ new_err_mode = old_err_mode | SEM_NOGPFAULTERRORBOX
+ ctypes.windll.kernel32.SetErrorMode(new_err_mode)
+ assert f(1) == 1
+ ctypes.windll.kernel32.SetErrorMode(old_err_mode)
else:
underscore_on_windows = ''
strlen = rffi.llexternal('strlen', [rffi.CCHARP], rffi.SIZE_T,
@@ -762,6 +764,8 @@
rffi.SIZE_T)
buffer = lltype.malloc(rffi.CCHARP.TO, 5, flavor='raw')
written = os_write(12312312, buffer, 5)
+ if sys.platform.startswith('win'):
+ ctypes.windll.kernel32.SetErrorMode(old_err_mode)
lltype.free(buffer, flavor='raw')
assert rffi.cast(rffi.LONG, written) < 0
# the next line is a random external function call,
diff --git a/rpython/rtyper/lltypesystem/test/test_llarena.py b/rpython/rtyper/lltypesystem/test/test_llarena.py
--- a/rpython/rtyper/lltypesystem/test/test_llarena.py
+++ b/rpython/rtyper/lltypesystem/test/test_llarena.py
@@ -302,6 +302,7 @@
class TestStandalone(test_standalone.StandaloneTests):
def test_compiled_arena_protect(self):
+ import sys
S = lltype.Struct('S', ('x', lltype.Signed))
#
def fn(argv):
@@ -325,6 +326,15 @@
t, cbuilder = self.compile(fn)
data = cbuilder.cmdexec('0')
assert data == '133\n'
+ if sys.platform.startswith('win'):
+ # Do not open error dialog box
+ import ctypes
+ SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN
+ old_err_mode = ctypes.windll.kernel32.GetErrorMode()
+ new_err_mode = old_err_mode | SEM_NOGPFAULTERRORBOX
+ ctypes.windll.kernel32.SetErrorMode(new_err_mode)
if has_protect:
cbuilder.cmdexec('1', expect_crash=True)
cbuilder.cmdexec('2', expect_crash=True)
+ if sys.platform.startswith('win'):
+ ctypes.windll.kernel32.SetErrorMode(old_err_mode)
diff --git a/rpython/rtyper/module/test/test_ll_os_environ.py b/rpython/rtyper/module/test/test_ll_os_environ.py
--- a/rpython/rtyper/module/test/test_ll_os_environ.py
+++ b/rpython/rtyper/module/test/test_ll_os_environ.py
@@ -12,6 +12,7 @@
assert f(1) > 0
def test_unset_error():
+ import sys
def foo(x):
if x:
os.environ['TEST'] = 'STRING'
@@ -26,4 +27,14 @@
return 0
f = compile(foo, [int], backendopt=False)
- assert f(1) == 1
+ if sys.platform.startswith('win'):
+ # Do not open error dialog box
+ import ctypes
+ SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN
+ old_err_mode = ctypes.windll.kernel32.GetErrorMode()
+ new_err_mode = old_err_mode | SEM_NOGPFAULTERRORBOX
+ ctypes.windll.kernel32.SetErrorMode(new_err_mode)
+ assert f(1) == 1
+ ctypes.windll.kernel32.SetErrorMode(old_err_mode)
+ else:
+ assert f(1) == 1
More information about the pypy-commit
mailing list