From a82642f9dbdff5253f40d4acee0cbb27aaf34462 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Thu, 19 Nov 2015 04:48:44 +0000 Subject: Issue #25583: Avoid incorrect errors raised by os.makedirs(exist_ok=True) --- Lib/os.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Lib/os.py') diff --git a/Lib/os.py b/Lib/os.py index a8f6a0b8db..27b241ae97 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -226,7 +226,7 @@ def makedirs(name, mode=0o777, exist_ok=False): try: makedirs(head, mode, exist_ok) except FileExistsError: - # be happy if someone already created the path + # Defeats race condition when another thread created the path pass cdir = curdir if isinstance(tail, bytes): @@ -235,8 +235,10 @@ def makedirs(name, mode=0o777, exist_ok=False): return try: mkdir(name, mode) - except OSError as e: - if not exist_ok or e.errno != errno.EEXIST or not path.isdir(name): + except OSError: + # Cannot rely on checking for EEXIST, since the operating system + # could give priority to other errors like EACCES or EROFS + if not exist_ok or not path.isdir(name): raise def removedirs(name): -- cgit v1.2.1