python / python/cpython

`OSError: AF_UNIX path too long` regression in `forkserver`

未關閉
#149,527 4 則留言 0 個 reaction 已指派 1 人 在 GitHub 檢視

@picnixz 已經在處理了。

開始於 2026年5月9日。

3.13 3.14 3.15 stdlib topic-multiprocessing type-bug
主要語言
Python
星號
77.2k
分支
36k
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

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。