Antoine Pitrou <pit...@free.fr> added the comment: > > This new patch also fixes importlib. > > """ > path_tmp = path + '.tmp' > with _io.FileIO(path_tmp, 'wb') as file: > file.write(data) > _os.rename(path_tmp, path) > """ > > I don't know exactly the context in which this code runs, but you can > have a corruption if multiple processes try to write the bytecode file > at the same time, since they'll all open the .tmp file: it should be > opened with O_EXCL.
Or perhaps append the PID to the name of the temp file ? (easier done in Python than in C :-)) > Also, as a side note, I'm wondering whether this type of check: > """ > if not sys.platform.startswith('win'): > # On POSIX-like platforms, renaming is atomic > """ > > couldn't be rewritten as > """ > if os.name == 'posix': > # On POSIX-like platforms, renaming is atomic > """ No, because os.py is not available to importlib (which must be bootstrappable early). See the _bootstrap.py header for information about what is available; this is also why we use FileIO instead of open(). > Fox example, does OS-X report as POSIX? I think so. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue13146> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com