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
|
import sys
|
||||||
|
|
||||||
|
from errno import ENOENT, ENOTDIR, EEXIST
|
||||||
|
|
||||||
_names = sys.builtin_module_names
|
_names = sys.builtin_module_names
|
||||||
|
|
||||||
# Note: more names are added to __all__ later.
|
# Note: more names are added to __all__ later.
|
||||||
|
@ -160,7 +162,12 @@ def makedirs(name, mode=0777):
|
||||||
if not tail:
|
if not tail:
|
||||||
head, tail = path.split(head)
|
head, tail = path.split(head)
|
||||||
if head and tail and not path.exists(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
|
if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists
|
||||||
return
|
return
|
||||||
mkdir(name, mode)
|
mkdir(name, mode)
|
||||||
|
@ -359,8 +366,6 @@ def execvpe(file, args, env):
|
||||||
__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"])
|
__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"])
|
||||||
|
|
||||||
def _execvpe(file, args, env=None):
|
def _execvpe(file, args, env=None):
|
||||||
from errno import ENOENT, ENOTDIR
|
|
||||||
|
|
||||||
if env is not None:
|
if env is not None:
|
||||||
func = execve
|
func = execve
|
||||||
argrest = (args, env)
|
argrest = (args, env)
|
||||||
|
|
|
@ -101,6 +101,9 @@ Core and builtins
|
||||||
Library
|
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 #1610437: fix a tarfile bug with long filename headers.
|
||||||
|
|
||||||
- Patch #1371075: Make ConfigParser accept optional dict type
|
- Patch #1371075: Make ConfigParser accept optional dict type
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue