On Windows, it's common that a test fails at exit when trying to remove a temporary directory created by a test. Usually, it's because the test spawns a child process in this directory and the test tries to remove the temporary directory before the child process completes. For example, temp_dir() of test.support.os_helper creates a temporary directory and then deletes it with rmtree(path) of test.support.os_helper: this function is different than shutil.rmtree(), it tries again on error with a timeout of 1.0 second. But sometimes, the function fails with the error "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process" on the os.rmdir() step. If os.rmdir() fails with PermissionError, it would be nice to try again later. Notes: * I'm not sure why there is a fixed timeout of 1.0 second. I would prefer to use SHORT_TIMEOUT, or even LONG_TIMEOUT, of test.support. * _force_run() should use test.support.sleeping_retry() ``` Traceback (most recent call last): File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 483, in temp_dir yield path File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 536, in temp_cwd yield cwd_dir File "D:\a\cpython\cpython\Lib\test\libregrtest\main.py", line 701, in main self._main(tests, kwargs) File "D:\a\cpython\cpython\Lib\test\libregrtest\main.py", line 722, in _main run_tests_worker(self.ns, self.worker_test_name) File "D:\a\cpython\cpython\Lib\test\libregrtest\runtest_mp.py", line 101, in run_tests_worker sys.exit(0) SystemExit: 0 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\a\cpython\cpython\Lib\test\support\__init__.py", line 203, in _force_run return func(*args) ^^^^^^^^^^^ PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'D:\\a\\cpython\\cpython\\build\\test_python_4372�\\test_python_worker_1096�' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\a\cpython\cpython\Lib\runpy.py", line 198, in _run_module_as_main return _run_code(code, main_globals, None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\a\cpython\cpython\Lib\runpy.py", line 88, in _run_code exec(code, run_globals) File "D:\a\cpython\cpython\Lib\test\regrtest.py", line 47, in <module> _main() File "D:\a\cpython\cpython\Lib\test\regrtest.py", line 43, in _main main() File "D:\a\cpython\cpython\Lib\test\libregrtest\main.py", line 763, in main Regrtest().main(tests=tests, **kwargs) File "D:\a\cpython\cpython\Lib\test\libregrtest\main.py", line 695, in main with os_helper.temp_cwd(test_cwd, quiet=True): File "D:\a\cpython\cpython\Lib\contextlib.py", line 155, in __exit__ self.gen.throw(value) File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 534, in temp_cwd with temp_dir(path=name, quiet=quiet) as temp_path: File "D:\a\cpython\cpython\Lib\contextlib.py", line 155, in __exit__ self.gen.throw(value) File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 488, in temp_dir rmtree(path) File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 445, in rmtree _rmtree(path) File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 389, in _rmtree _waitfor(lambda p: _force_run(p, os.rmdir, p), path) File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 333, in _waitfor func(pathname) File "D:\a\cpython\cpython\Lib\test\support\os_helper.py", line 389, in <lambda> _waitfor(lambda p: _force_run(p, os.rmdir, p), path) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\a\cpython\cpython\Lib\test\support\__init__.py", line 214, in _force_run return func(*args) ^^^^^^^^^^^ PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'D:\\a\\cpython\\cpython\\build\\test_python_4372� ``` <!-- gh-linked-prs --> ### Linked PRs - gh-99464 - gh-99504 <!-- /gh-linked-prs -->