Message145415
> > 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. |
|
Date |
User |
Action |
Args |
2011-10-12 16:51:02 | pitrou | set | recipients:
+ pitrou, brett.cannon, ncoghlan, vstinner, r.david.murray, neologix |
2011-10-12 16:51:01 | pitrou | link | issue13146 messages |
2011-10-12 16:51:01 | pitrou | create | |
|