chanbackup: close temp SCB file before rename

It has been reported that on Windows, the current file swap process
doesn't properly work since we still have the file open when we try to
rename it. In order to fix this, we'll now close the file _before_ we
rename it.
This commit is contained in:
Olaoluwa Osuntokun 2019-05-27 15:36:50 -07:00
parent 9523be7170
commit f40ddd36d5
No known key found for this signature in database
GPG Key ID: CE58F7F8E20FD9A2

@ -113,6 +113,13 @@ func (b *MultiFile) UpdateAndSwap(newBackup PackedMulti) error {
log.Infof("Swapping old multi backup file from %v to %v", log.Infof("Swapping old multi backup file from %v to %v",
b.tempFileName, b.fileName) b.tempFileName, b.fileName)
// Before we rename the swap (atomic name swap), we'll make
// sure to close the current file as some OSes don't support
// renaming a file that's already open (Windows).
if err := b.tempFile.Close(); err != nil {
return fmt.Errorf("unable to close file: %v", err)
}
// Finally, we'll attempt to atomically rename the temporary file to // Finally, we'll attempt to atomically rename the temporary file to
// the main back up file. If this succeeds, then we'll only have a // the main back up file. If this succeeds, then we'll only have a
// single file on disk once this method exits. // single file on disk once this method exits.