mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +00:00
Patch #1608267: fix a race condition in os.makedirs() is the directory
to be created is already there.
This commit is contained in:
parent
66fab425a8
commit
b130743e97
2 changed files with 11 additions and 3 deletions
11
Lib/os.py
11
Lib/os.py
|
@ -25,6 +25,8 @@ and opendir), and leave all pathname manipulation to os.path
|
|||
|
||||
import sys
|
||||
|
||||
from errno import ENOENT, ENOTDIR, EEXIST
|
||||
|
||||
_names = sys.builtin_module_names
|
||||
|
||||
# Note: more names are added to __all__ later.
|
||||
|
@ -160,7 +162,12 @@ def makedirs(name, mode=0777):
|
|||
if not tail:
|
||||
head, tail = path.split(head)
|
||||
if head and tail and not path.exists(head):
|
||||
makedirs(head, mode)
|
||||
try:
|
||||
makedirs(head, mode)
|
||||
except OSError, e:
|
||||
# be happy if someone already created the path
|
||||
if e.errno != EEXIST:
|
||||
raise
|
||||
if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists
|
||||
return
|
||||
mkdir(name, mode)
|
||||
|
@ -359,8 +366,6 @@ def execvpe(file, args, env):
|
|||
__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"])
|
||||
|
||||
def _execvpe(file, args, env=None):
|
||||
from errno import ENOENT, ENOTDIR
|
||||
|
||||
if env is not None:
|
||||
func = execve
|
||||
argrest = (args, env)
|
||||
|
|
|
@ -101,6 +101,9 @@ Core and builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Patch #1608267: fix a race condition in os.makedirs() is the directory
|
||||
to be created is already there.
|
||||
|
||||
- Patch #1610437: fix a tarfile bug with long filename headers.
|
||||
|
||||
- Patch #1371075: Make ConfigParser accept optional dict type
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue