Skip to content

gh-160326: Raise ValueError for a NaN timeout in Condition.wait() - #160327

Merged
gpshead merged 1 commit into
python:mainfrom
gpshead:scanfix-threading-tit4iov6
Oct 23, 2026
Merged

gpshead merged 1 commit into
python:mainfrom
gpshead:scanfix-threading-tit4iov6

Conversation

@gpshead

@gpshead gpshead commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

Condition.wait() only blocked when timeout > 0, so a NaN timeout became a non-blocking acquire and every deadline loop on top of it (Queue.get()/put(), Semaphore.acquire(), Condition.wait_for(), Barrier.wait(), as_completed()) spun without ever timing out. Take the non-blocking path only for timeout <= 0, so that NaN reaches lock.acquire() and gets the ValueError it already raises. Condition.wait() and Event.wait() with a NaN timeout used to return False at once and now raise, which is why there is no backport label. The error is only raised when a call has to wait: Queue.get(timeout=nan) on a non-empty queue still succeeds.

Fixes #160326

ANT-2026-TIT4IOV6

A NaN timeout was treated as zero, which made the deadline loops built
on Condition.wait(), such as Queue.get() and Semaphore.acquire(), spin
without ever timing out.
@gpshead gpshead self-assigned this Oct 22, 2026
@gpshead
gpshead marked this pull request as ready for review October 22, 2026 19:19
@gpshead gpshead added needs backport to 3.14 bugs and security fixes needs backport to 3.15 bugs and security fixes labels Oct 23, 2026
@gpshead
gpshead merged commit 3387b19 into python:main Oct 23, 2026
59 checks passed
@miss-islington-app

Copy link
Copy Markdown

Thanks @gpshead for the PR 🌮🎉.. I'm working now to backport this PR to: 3.14, 3.15.
🐍🍒⛏🤖

@bedevere-app

bedevere-app Bot commented Oct 23, 2026

Copy link
Copy Markdown

GH-160416 is a backport of this pull request to the 3.15 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 bugs and security fixes label Oct 23, 2026
@bedevere-app

bedevere-app Bot commented Oct 23, 2026

Copy link
Copy Markdown

GH-160417 is a backport of this pull request to the 3.14 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Oct 23, 2026
gpshead added a commit that referenced this pull request Oct 23, 2026
…t() (GH-160327) (#160417)

gh-160326: Raise ValueError for a NaN timeout in Condition.wait() (GH-160327)

A NaN timeout was treated as zero, which made the deadline loops built
on Condition.wait(), such as Queue.get() and Semaphore.acquire(), spin
without ever timing out.
(cherry picked from commit 3387b19)

Co-authored-by: Gregory P. Smith <68491+gpshead@users.noreply.github.com>
gpshead added a commit that referenced this pull request Oct 23, 2026
…t() (GH-160327) (#160416)

gh-160326: Raise ValueError for a NaN timeout in Condition.wait() (GH-160327)

A NaN timeout was treated as zero, which made the deadline loops built
on Condition.wait(), such as Queue.get() and Semaphore.acquire(), spin
without ever timing out.
(cherry picked from commit 3387b19)

Co-authored-by: Gregory P. Smith <68491+gpshead@users.noreply.github.com>
@bedevere-bot

Copy link
Copy Markdown

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot AMD64 Debian root 3.14 (tier-1) has failed when building commit 3234061.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/#/builders/1742/builds/1923) and take a look at the build logs.
  4. Check if the failure is related to this commit (3234061) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/#/builders/1742/builds/1923

Failed tests:

  • test.test_multiprocessing_forkserver.test_misc
  • test_unparse
  • test.test_multiprocessing_forkserver.test_processes
  • test_math
  • test.test_concurrent_futures.test_process_pool
  • test_multiprocessing_main_handling
  • test.test_multiprocessing_spawn.test_manager
  • test_bigmem
  • test_unicodedata
  • test.test_concurrent_futures.test_thread_pool
  • test_io

Failed subtests:

  • test_traceback - test.test_concurrent_futures.test_process_pool.ProcessPoolForkserverProcessPoolExecutorTest.test_traceback
  • test_directory_compiled - test.test_multiprocessing_main_handling.ForkServerCmdLineTest.test_directory_compiled
  • test_daemon_threads_shutdown_stdout_deadlock - test.test_io.CMiscIOTest.test_daemon_threads_shutdown_stdout_deadlock
  • test_preload_main_large_sys_argv - test.test_multiprocessing_forkserver.test_misc.MiscTestCase.test_preload_main_large_sys_argv

Summary of the results of the build (if available):

==

Click to see traceback logs
Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/test_concurrent_futures/test_process_pool.py", line 126, in test_traceback
    self.assertIs(type(exc), RuntimeError)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: <class 'concurrent.futures.process.BrokenProcessPool'> is not <class 'RuntimeError'>


Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import sys; from multiprocessing.forkserver import main; main(10, 11, ['__main__'], sys_argv=sys.argv[1:], **{'sys_path': ['/tmp/test_python_8unq44xm/tmpq5nkynpk', '/root/buildarea/3.14.angelico-debian-amd64/build/target/lib/python314.zip', '/root/buildarea/3.14.angelico-debian-amd64/build/Lib', '/root/buildarea/3.14.angelico-debian-amd64/build/build/lib.linux-x86_64-3.14', '/root/.local/lib/python3.14/site-packages'], 'authkey_r': 13})
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/__init__.py", line 16, in <module>
    from . import context
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/context.py", line 6, in <module>
    from . import process
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/process.py", line 19, in <module>
    import signal
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/signal.py", line 3, in <module>
    from enum import IntEnum as _IntEnum
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/enum.py", line 1343, in <module>
    class StrEnum(str, ReprEnum):
    ...<30 lines>...
            return name.lower()
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/enum.py", line 560, in __new__
    classdict.update(enum_class.__dict__)
    ^^^^^^^^^^^^^^^^
AttributeError: type object 'EnumType' has no attribute 'update'
Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/runpy.py", line 203, in _run_module_as_main
    return _run_code(code, main_globals, None,
                     "__main__", mod_spec)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/runpy.py", line 88, in _run_code
    exec(code, run_globals)
    ~~~~^^^^^^^^^^^^^^^^^^^
  File "/tmp/test_python_8unq44xm/tmpq5nkynpk/__main__.py", line 18, in <module>
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/context.py", line 120, in Pool
    return Pool(processes, initializer, initargs, maxtasksperchild,
                context=self.get_context())
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/pool.py", line 215, in __init__
    self._repopulate_pool()
    ~~~~~~~~~~~~~~~~~~~~~^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/pool.py", line 306, in _repopulate_pool
    return self._repopulate_pool_static(self._ctx, self.Process,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
                                        self._processes,
                                        ^^^^^^^^^^^^^^^^
    ...<3 lines>...
                                        self._maxtasksperchild,
                                        ^^^^^^^^^^^^^^^^^^^^^^^
                                        self._wrap_exception)
                                        ^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/pool.py", line 329, in _repopulate_pool_static
    w.start()
    ~~~~~~~^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/process.py", line 121, in start
    self._popen = self._Popen(self)
                  ~~~~~~~~~~~^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/context.py", line 316, in _Popen
    return Popen(process_obj)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/popen_forkserver.py", line 35, in __init__
    super().__init__(process_obj)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/popen_fork.py", line 20, in __init__
    self._launch(process_obj)
    ~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/popen_forkserver.py", line 51, in _launch
    self.sentinel, w = forkserver.connect_to_new_process(self._fds)
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/forkserver.py", line 106, in connect_to_new_process
    connection.answer_challenge(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
            wrapped_client, self._forkserver_authkey)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 996, in answer_challenge
    message = connection.recv_bytes(256)         # reject large message
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 227, in recv_bytes
    buf = self._recv_bytes(maxlength)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 452, in _recv_bytes
    buf = self._recv(4)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 417, in _recv
    chunk = read(handle, to_read)
ConnectionResetError: [Errno 104] Connection reset by peer
---


Traceback (most recent call last):
  File "<string>", line 1, in <module>
    from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=5, pipe_handle=16)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1371, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1342, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 938, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 759, in exec_module
  File "<frozen importlib._bootstrap_external>", line 892, in get_code
  File "<frozen importlib._bootstrap_external>", line 513, in _compile_bytecode
TypeError: 'str' object is not callable
Timeout (0:20:00)!
Thread 0x00007f35c2d4c740 [python] (most recent call first):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 417 in _recv
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 452 in _recv_bytes
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 261 in recv
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/managers.py", line 832 in _callmethod
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/managers.py", line 1118 in wait
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/_test_multiprocessing.py", line 2371 in _test_abort_and_reset_f
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/_test_multiprocessing.py", line 2234 in run_threads
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/_test_multiprocessing.py", line 2386 in test_abort_and_reset
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/case.py", line 615 in _callTestMethod
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/case.py", line 669 in run
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/case.py", line 725 in __call__
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 122 in run
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 84 in __call__
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 122 in run
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 84 in __call__
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/runner.py", line 257 in run
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 84 in _run_suite
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 42 in run_unittest
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 162 in test_func
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 118 in regrtest_runner
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 165 in _load_run_test
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 212 in _runtest_env_changed_exc
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 321 in _runtest
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 350 in run_single_test
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/worker.py", line 99 in worker_process
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/worker.py", line 137 in main
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/worker.py", line 141 in <module>
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/runpy.py", line 88 in _run_code
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/runpy.py", line 203 in _run_module_as_main


Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/process.py", line 320, in _bootstrap
    self.run()
    ~~~~~~~~^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/_test_multiprocessing.py", line 570, in _sleep_some_event
    event.set()
    ~~~~~~~~~^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/synchronize.py", line 349, in set
    with self._cond:
         ^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/synchronize.py", line 247, in __exit__
    return self._lock.__exit__(*args)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/synchronize.py", line 100, in __exit__
    return self._semlock.__exit__(*args)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
KeyboardInterrupt
k


Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/pool.py", line 131, in worker
    put((job, i, result))
    ~~~^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/queues.py", line 397, in put
    self._writer.send_bytes(obj)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 211, in send_bytes
    self._send_bytes(m[offset:offset + size])
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 449, in _send_bytes
    self._send(header + buf)
    ~~~~~~~~~~^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/multiprocessing/connection.py", line 405, in _send
    n = write(self._handle, buf)
BrokenPipeError: [Errno 32] Broken pipe


Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 212, in _runtest_env_changed_exc
    _load_run_test(result, runtests)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 165, in _load_run_test
    regrtest_runner(result, test_func, runtests)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 118, in regrtest_runner
    test_result = test_func()
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 162, in test_func
    return run_unittest(test_mod, runtests)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 42, in run_unittest
    return _run_suite(tests)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/libregrtest/single.py", line 84, in _run_suite
    result = runner.run(suite)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/runner.py", line 257, in run
    test(result)
    ~~~~^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
           ~~~~~~~~^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 122, in run
    test(result)
    ~~~~^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
           ~~~~~~~~^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/suite.py", line 122, in run
    test(result)
    ~~~~^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/case.py", line 725, in __call__
    return self.run(*args, **kwds)
           ~~~~~~~~^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/unittest/case.py", line 656, in run
    getattr(self, "__unittest_expecting_failure__", False) or
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: attribute name must be string, not 'NoneType'


Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/test_multiprocessing_main_handling.py", line 219, in test_directory_compiled
    self._check_script(script_dir)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/test_multiprocessing_main_handling.py", line 167, in _check_script
    rc, out, err = assert_python_ok(*run_args, __isolated=False)
                   ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/support/script_helper.py", line 182, in assert_python_ok
    return _assert_python(True, *args, **env_vars)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/support/script_helper.py", line 167, in _assert_python
    res.fail(cmd_line)
    ~~~~~~~~^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/support/script_helper.py", line 80, in fail
    raise AssertionError(f"Process return code is {exitcode}\n"
    ...<10 lines>...
                         f"---")
AssertionError: Process return code is 1
command line: ['/root/buildarea/3.14.angelico-debian-amd64/build/python', '-X', 'faulthandler', '-E', '/tmp/test_python_8unq44xm/tmpq5nkynpk', 'forkserver']


Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/_test_multiprocessing.py", line 231, in forkserver_check_wrapper
    return test_item(*args, **kwargs)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/_test_multiprocessing.py", line 7307, in test_preload_main_large_sys_argv
    self.assertEqual(err, b'')
    ~~~~~~~~~~~~~~~~^^^^^^^^^^
AssertionError: b'python: Python/generated_cases.c.h:9033: [5633 chars]s>\n' != b''


Traceback (most recent call last):
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/test_io.py", line 4921, in test_daemon_threads_shutdown_stdout_deadlock
    self.check_daemon_threads_shutdown_deadlock('stdout')
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/test_io.py", line 4905, in check_daemon_threads_shutdown_deadlock
    res, _ = run_python_until_end("-c", code)
             ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/test/support/script_helper.py", line 155, in run_python_until_end
    out, err = proc.communicate()
               ~~~~~~~~~~~~~~~~^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/subprocess.py", line 1221, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
                     ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/subprocess.py", line 2144, in _communicate
    timeout = self._remaining_time(endtime)
  File "/root/buildarea/3.14.angelico-debian-amd64/build/Lib/subprocess.py", line 1259, in _remaining_time
    return endtime - _time()
           ~~~~~~~~^~~~~~~~~
TypeError: unsupported operand type(s) for -: 'Popen' and 'float'


Traceback (most recent call last):

@gpshead gpshead added the sprint label Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

queue.Queue.get() and other threading.Condition.wait() callers busy-loop on a NaN timeout

2 participants