# HG changeset patch # User Edouard Tisserant # Date 1591015651 -7200 # Node ID fbe1c05c03115754b7bd1d6964a9d33e69f2a81f # Parent 1f043fdaa7fb6a5a765b1913740a94853bd38548 Runtime: fsync() files when transfering them, to prebent data loss when poweroff soon after programming. Fixed variable naming as a side effect. diff -r 1f043fdaa7fb -r fbe1c05c0311 runtime/PLCObject.py --- a/runtime/PLCObject.py Thu May 28 11:38:09 2020 +0200 +++ b/runtime/PLCObject.py Mon Jun 01 14:47:31 2020 +0200 @@ -520,7 +520,7 @@ @RunInMain def SeedBlob(self, seed): blob = (mkstemp(dir=self.tmpdir) + (hashlib.new('md5'),)) - _fobj, _path, md5sum = blob + _fd, _path, md5sum = blob md5sum.update(seed) newBlobID = md5sum.digest() self.blobs[newBlobID] = blob @@ -533,17 +533,17 @@ if blob is None: return None - fobj, _path, md5sum = blob + fd, _path, md5sum = blob md5sum.update(data) newBlobID = md5sum.digest() - os.write(fobj, data) + os.write(fd, data) self.blobs[newBlobID] = blob return newBlobID @RunInMain def PurgeBlobs(self): - for fobj, _path, _md5sum in self.blobs.values(): - os.close(fobj) + for fd, _path, _md5sum in self.blobs.values(): + os.close(fd) self._init_blobs() def _BlobAsFile(self, blobID, newpath): @@ -552,8 +552,11 @@ if blob is None: raise Exception(_("Missing data to create file: {}").format(newpath)) - fobj, path, _md5sum = blob - os.close(fobj) + fd, path, _md5sum = blob + fobj = os.fdopen(fd) + fobj.flush() + os.fsync(fd) + fobj.close() shutil.move(path, newpath) def _extra_files_log_path(self):