mirror of
https://github.com/python/cpython
synced 2024-10-14 17:40:01 +00:00
gh-95672 skip fcntl when pipesize is smaller than pagesize (gh-102163)
This commit is contained in:
parent
c1748ed59d
commit
2f62a5da94
|
@ -536,6 +536,13 @@ The :mod:`test.support` module defines the following functions:
|
|||
:func:`doctest.testmod`.
|
||||
|
||||
|
||||
.. function:: get_pagesize()
|
||||
|
||||
Get size of a page in bytes.
|
||||
|
||||
.. versionadded:: 3.12
|
||||
|
||||
|
||||
.. function:: setswitchinterval(interval)
|
||||
|
||||
Set the :func:`sys.setswitchinterval` to the given *interval*. Defines
|
||||
|
|
|
@ -51,6 +51,8 @@
|
|||
# sys
|
||||
"is_jython", "is_android", "is_emscripten", "is_wasi",
|
||||
"check_impl_detail", "unix_shell", "setswitchinterval",
|
||||
# os
|
||||
"get_pagesize",
|
||||
# network
|
||||
"open_urlresource",
|
||||
# processes
|
||||
|
@ -1893,6 +1895,18 @@ def setswitchinterval(interval):
|
|||
return sys.setswitchinterval(interval)
|
||||
|
||||
|
||||
def get_pagesize():
|
||||
"""Get size of a page in bytes."""
|
||||
try:
|
||||
page_size = os.sysconf('SC_PAGESIZE')
|
||||
except (ValueError, AttributeError):
|
||||
try:
|
||||
page_size = os.sysconf('SC_PAGE_SIZE')
|
||||
except (ValueError, AttributeError):
|
||||
page_size = 4096
|
||||
return page_size
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def disable_faulthandler():
|
||||
import faulthandler
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
import struct
|
||||
import sys
|
||||
import unittest
|
||||
from test.support import verbose, cpython_only
|
||||
from test.support import verbose, cpython_only, get_pagesize
|
||||
from test.support.import_helper import import_module
|
||||
from test.support.os_helper import TESTFN, unlink
|
||||
|
||||
|
@ -201,7 +201,8 @@ def test_fcntl_f_pipesize(self):
|
|||
# Get the default pipesize with F_GETPIPE_SZ
|
||||
pipesize_default = fcntl.fcntl(test_pipe_w, fcntl.F_GETPIPE_SZ)
|
||||
pipesize = pipesize_default // 2 # A new value to detect change.
|
||||
if pipesize < 512: # the POSIX minimum
|
||||
pagesize_default = get_pagesize()
|
||||
if pipesize < pagesize_default: # the POSIX minimum
|
||||
raise unittest.SkipTest(
|
||||
'default pipesize too small to perform test.')
|
||||
fcntl.fcntl(test_pipe_w, fcntl.F_SETPIPE_SZ, pipesize)
|
||||
|
|
|
@ -717,7 +717,8 @@ def test_pipesizes(self):
|
|||
os.close(test_pipe_r)
|
||||
os.close(test_pipe_w)
|
||||
pipesize = pipesize_default // 2
|
||||
if pipesize < 512: # the POSIX minimum
|
||||
pagesize_default = support.get_pagesize()
|
||||
if pipesize < pagesize_default: # the POSIX minimum
|
||||
raise unittest.SkipTest(
|
||||
'default pipesize too small to perform test.')
|
||||
p = subprocess.Popen(
|
||||
|
|
Loading…
Reference in a new issue