`OSError: AF_UNIX path too long` regression in `forkserver`
未关闭
@picnixz 已经在做这个了。
开始于 2026年5月9日。
3.13
3.14
3.15
stdlib
topic-multiprocessing
type-bug
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Bug report
Bug description:
Since fd81246bd55e4fab1976a7cca3e5d42582dbdac0 (in 3.14 as e590f007ed8b0268c40bcae445d6b50e06b00960), we're seeing Gentoo Portage randomly fail with:
Traceback (most recent call last):
File "/usr/lib/portage/python3.14/ebuild-ipc.py", line 303, in <module>
sys.exit(ebuild_ipc_main(sys.argv[1:]))
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "/usr/lib/portage/python3.14/ebuild-ipc.py", line 299, in ebuild_ipc_main
return ebuild_ipc.communicate(args)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/usr/lib/portage/python3.14/ebuild-ipc.py", line 151, in communicate
lock_obj = portage.locks.lockfile(self.ipc_lock_file, unlinkfile=True)
File "/usr/lib/python3.14/site-packages/portage/locks.py", line 184, in lockfile
lock = _lockfile_iteration(
mypath,
...<3 lines>...
flags=flags,
)
File "/usr/lib/python3.14/site-packages/portage/locks.py", line 314, in _lockfile_iteration
locking_method = _get_lock_fn()
File "/usr/lib/python3.14/site-packages/portage/locks.py", line 96, in _get_lock_fn
if _test_lock_fn(_lockf_test_lock_fn):
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/portage/locks.py", line 128, in _test_lock_fn
proc.start()
~~~~~~~~~~^^
File "/usr/lib/python3.14/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
~~~~~~~~~~~^^^^^^
File "/usr/lib/python3.14/multiprocessing/context.py", line 230, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/usr/lib/python3.14/multiprocessing/context.py", line 306, in _Popen
return Popen(process_obj)
File "/usr/lib/python3.14/multiprocessing/popen_forkserver.py", line 35, in __init__
super().__init__(process_obj)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/usr/lib/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
self._launch(process_obj)
~~~~~~~~~~~~^^^^^^^^^^^^^
File "/usr/lib/python3.14/multiprocessing/popen_forkserver.py", line 51, in _launch
self.sentinel, w = forkserver.connect_to_new_process(self._fds)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/usr/lib/python3.14/multiprocessing/forkserver.py", line 89, in connect_to_new_process
self.ensure_running()
~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.14/multiprocessing/forkserver.py", line 167, in ensure_running
listener.bind(address)
~~~~~~~~~~~~~^^^^^^^^^
OSError: AF_UNIX path too long
Apparently in this case the resulting path was:
/tmp/mgorny-dev-scripts/portage/dev-python/trove-classifiers-2026.5.7.17/temp/pymp-o2g23iqr/sock-d559f6e62fa1
Note that tempfile.mktemp() used to append 8 ASCII characters, while this logic appends 12 hex digits, so the logic introduced in 1a07a01014bde23acd2684916ef38dc0cd73c2de would be off by 4 now.
CPython versions tested on:
3.14, CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-149597
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
评估
这个 Issue 还没有评估数据。