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.
|
||||
"""
|
||||
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:
|
||||
names = os.listdir("/proc/self/fd")
|
||||
names = os.listdir(fd_path)
|
||||
# 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
|
||||
except FileNotFoundError:
|
||||
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