mirror of https://github.com/python/cpython.git
gh-109981: Fix support.fd_count() on macOS 14 (#112797)
Use scanning "/dev/fd/" on macOS in support.fd_count(). That's both more efficient than scanning all possible file descriptors, and avoids crashing the interpreter when there are open "guarded" file descriptors. "Guarded" file descriptors are a macOS feature where file descriptors used by system libraries are marked and cause hard crashes when used by "user" code. Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
16448cab44
commit
953ee622b3
|
@ -592,10 +592,17 @@ def fd_count():
|
||||||
"""Count the number of open file descriptors.
|
"""Count the number of open file descriptors.
|
||||||
"""
|
"""
|
||||||
if sys.platform.startswith(('linux', 'freebsd', 'emscripten')):
|
if sys.platform.startswith(('linux', 'freebsd', 'emscripten')):
|
||||||
|
fd_path = "/proc/self/fd"
|
||||||
|
elif sys.platform == "darwin":
|
||||||
|
fd_path = "/dev/fd"
|
||||||
|
else:
|
||||||
|
fd_path = None
|
||||||
|
|
||||||
|
if fd_path is not None:
|
||||||
try:
|
try:
|
||||||
names = os.listdir("/proc/self/fd")
|
names = os.listdir(fd_path)
|
||||||
# Subtract one because listdir() internally opens a file
|
# Subtract one because listdir() internally opens a file
|
||||||
# descriptor to list the content of the /proc/self/fd/ directory.
|
# descriptor to list the content of the directory.
|
||||||
return len(names) - 1
|
return len(names) - 1
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Use ``/dev/fd`` on macOS to determine the number of open files in
|
||||||
|
``test.support.os_helper.fd_count`` to avoid a crash with "guarded" file
|
||||||
|
descriptors when probing for open files.
|
Loading…
Reference in New Issue