forked from M-Labs/artiq
remoting: avoid a race condition.
This commit is contained in:
parent
83278a6edb
commit
f4022ba872
|
@ -83,8 +83,16 @@ class SSHClient(Client):
|
|||
logger.debug("Using cached {}".format(filename))
|
||||
else:
|
||||
logger.debug("Transferring {}".format(filename))
|
||||
with sftp.open(remote_filename, 'wb') as remote:
|
||||
# Avoid a race condition by writing into a temporary file
|
||||
# and atomically replacing
|
||||
with sftp.open(remote_filename + ".~", "wb") as remote:
|
||||
remote.write(rewritten)
|
||||
try:
|
||||
sftp.rename(remote_filename + ".~", remote_filename)
|
||||
except IOError:
|
||||
# Either it already exists (this is OK) or something else
|
||||
# happened (this isn't) and we need to re-raise
|
||||
sftp.stat(remote_filename)
|
||||
return remote_filename
|
||||
|
||||
def spawn_command(self, cmd, get_pty=False, **kws):
|
||||
|
|
Loading…
Reference in New Issue