From: Georg Baum Date: Mon, 3 Nov 2014 15:07:17 +0000 (-0500) Subject: Fix for bug #9234, from Georg. X-Git-Tag: 2.2.0alpha1~1576 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=2d338ee3e2138145a1171df15ed6a9b3c529a23f;p=features.git 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. --- 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) :