Srdjan Grubor added the comment:
Also, extract_member in tarfile.py is not thread-safe since the check for
folder existence might occur during another thread's creation of that same dir
causing the code to error out.
File "/usr/lib/python3.4/concurrent/futures/thread.py", line 54, in run
result = self.fn(*self.args, **self.kwargs)
File "./xdelta3-dir-patcher", line 499, in _apply_file_delta
archive_object.expand(patch_file, staging_dir)
File "./xdelta3-dir-patcher", line 284, in expand
self.archive_object.extract(member, extraction_path)
File "/usr/lib/python3.4/tarfile.py", line 2019, in extract
set_attrs=set_attrs)
File "/usr/lib/python3.4/tarfile.py", line 2080, in _extract_member
os.makedirs(upperdirs)
File "/usr/lib/python3.4/os.py", line 237, in makedirs
mkdir(name, mode)
FileExistsError: [Errno 17] File exists:
'/tmp/XDelta3DirPatcher_is0y4_5f/xdelta/updated folder'
Code causing problems:
2065 def _extract_member(self, tarinfo, targetpath, set_attrs=True):
...
2075 # Create all upper directories.
2076 upperdirs = os.path.dirname(targetpath)
2077 if upperdirs and not os.path.exists(upperdirs):
...
2080 os.makedirs(upperdirs) # Fails since the dir might be already
created between lines 2077 and 2080
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue23649>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com