From: Serhiy Storchaka Date: Thu, 11 Feb 2016 11:29:28 +0000 (+0200) Subject: Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. X-Git-Tag: v3.6.0a1~613^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=06c45e6e9c9e199a39b874338fe7cdd21d1925b2;p=thirdparty%2FPython%2Fcpython.git Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. --- diff --git a/Lib/os.py b/Lib/os.py index 674a7d7efda1..a49e7ce45603 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -369,22 +369,13 @@ def walk(top, topdown=True, onerror=None, followlinks=False): # Note that scandir is global in this module due # to earlier import-*. scandir_it = scandir(top) + entries = list(scandir(top)) except OSError as error: if onerror is not None: onerror(error) return - while True: - try: - try: - entry = next(scandir_it) - except StopIteration: - break - except OSError as error: - if onerror is not None: - onerror(error) - return - + for entry in entries: try: is_dir = entry.is_dir() except OSError: diff --git a/Misc/NEWS b/Misc/NEWS index 8e7d7d425a8e..459361b158da 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -73,6 +73,8 @@ Core and Builtins Library ------- +- Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. + - Issue #26117: The os.scandir() iterator now closes file descriptor not only when the iteration is finished, but when it was failed with error.