From 2d338ee3e2138145a1171df15ed6a9b3c529a23f Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Mon, 3 Nov 2014 10:07:17 -0500 Subject: [PATCH] Fix for bug #9234, from Georg. Our TempFile class uses QTemporaryFile internally, and, on Windows, this keeps the file locked so that we cannot rename it. So we have to release the lock. --- src/Buffer.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 9dd2a25c93..f236df3bec 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1300,12 +1300,15 @@ bool Buffer::save() const // we first write the file to a new name, then move it to its // proper location once that has been done successfully. that // way we preserve the original file if something goes wrong. - TempFile tempfile(fileName().onlyPath(), "tmpXXXXXX.lyx"); + string const justname = fileName().onlyFileNameWithoutExt(); + boost::scoped_ptr + tempfile(new TempFile(fileName().onlyPath(), + justname + "-XXXXXX.lyx")); bool const symlink = fileName().isSymLink(); if (!symlink) - tempfile.setAutoRemove(false); + tempfile->setAutoRemove(false); - FileName savefile(tempfile.name()); + FileName savefile(tempfile->name()); LYXERR(Debug::FILES, "Saving to " << savefile.absFileName()); if (!writeFile(savefile)) return false; @@ -1339,6 +1342,10 @@ bool Buffer::save() const } } + // Destroy tempfile since it keeps the file locked on windows (bug 9234) + // Only do this if tempfile is not in autoremove mode + if (!symlink) + tempfile.reset(); // If we have no symlink, we can simply rename the temp file. // Otherwise, we need to copy it so the symlink stays intact. if (made_backup && symlink ? savefile.copyTo(fileName(), true) : -- 2.39.2