]> git.lyx.org Git - features.git/commitdiff
Fix for bug #9234, from Georg.
authorGeorg Baum <baum@lyx.org>
Mon, 3 Nov 2014 15:07:17 +0000 (10:07 -0500)
committerRichard Heck <rgheck@lyx.org>
Mon, 3 Nov 2014 15:09:40 +0000 (10:09 -0500)
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

index 9dd2a25c939c087eae054513198b54fef344ddfb..f236df3becd0910c9496360b88061a29847b2627 100644 (file)
@@ -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>
+               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) :