Commit e1a1674e authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #17835: Fix test_io when the default OS pipe buffer size is larger than one million bytes.

parent 6ae46673
...@@ -573,10 +573,12 @@ def _is_ipv6_enabled(): ...@@ -573,10 +573,12 @@ def _is_ipv6_enabled():
IPV6_ENABLED = _is_ipv6_enabled() IPV6_ENABLED = _is_ipv6_enabled()
# A constant likely larger than the underlying OS pipe buffer size. # A constant likely larger than the underlying OS pipe buffer size, to
# Windows limit seems to be around 512B, and many Unix kernels have a 64K pipe # make writes blocking.
# buffer size or 16*PAGE_SIZE: take a few megs to be sure. This # Windows limit seems to be around 512 B, and many Unix kernels have a
PIPE_MAX_SIZE = 3 * 1000 * 1000 # 64 KiB pipe buffer size or 16 * PAGE_SIZE: take a few megs to be sure.
# (see issue #17835 for a discussion of this number).
PIPE_MAX_SIZE = 4 *1024 * 1024 + 1
# decorator for skipping tests on non-IEEE 754 platforms # decorator for skipping tests on non-IEEE 754 platforms
......
...@@ -3061,7 +3061,7 @@ class SignalsTest(unittest.TestCase): ...@@ -3061,7 +3061,7 @@ class SignalsTest(unittest.TestCase):
# The buffered IO layer must check for pending signal # The buffered IO layer must check for pending signal
# handlers, which in this case will invoke alarm_interrupt(). # handlers, which in this case will invoke alarm_interrupt().
self.assertRaises(ZeroDivisionError, self.assertRaises(ZeroDivisionError,
wio.write, item * (support.PIPE_MAX_SIZE // len(item))) wio.write, item * (support.PIPE_MAX_SIZE // len(item) + 1))
t.join() t.join()
# We got one byte, get another one and check that it isn't a # We got one byte, get another one and check that it isn't a
# repeat of the first one. # repeat of the first one.
...@@ -3160,7 +3160,7 @@ class SignalsTest(unittest.TestCase): ...@@ -3160,7 +3160,7 @@ class SignalsTest(unittest.TestCase):
select = support.import_module("select") select = support.import_module("select")
# A quantity that exceeds the buffer size of an anonymous pipe's # A quantity that exceeds the buffer size of an anonymous pipe's
# write end. # write end.
N = 1024 * 1024 N = support.PIPE_MAX_SIZE
r, w = os.pipe() r, w = os.pipe()
fdopen_kwargs["closefd"] = False fdopen_kwargs["closefd"] = False
# We need a separate thread to read from the pipe and allow the # We need a separate thread to read from the pipe and allow the
......
...@@ -132,6 +132,9 @@ IDLE ...@@ -132,6 +132,9 @@ IDLE
Tests Tests
----- -----
- Issue #17835: Fix test_io when the default OS pipe buffer size is larger
than one million bytes.
- Issue #17065: Use process-unique key for winreg tests to avoid failures if - Issue #17065: Use process-unique key for winreg tests to avoid failures if
test is run multiple times in parallel (eg: on a buildbot host). test is run multiple times in parallel (eg: on a buildbot host).
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment