]> git.lyx.org Git - features.git/commitdiff
Fix bug #10091.
authorRichard Kimberly Heck <rikiheck@lyx.org>
Sun, 7 Jul 2019 17:13:52 +0000 (13:13 -0400)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:34 +0000 (15:48 +0200)
See the discussion. The decision was just to keep re-trying for a
bit, since the lock preventing us from removing the old file seems
to clear after a bit.

src/support/FileName.cpp

index b485ae939524d989d585110ac5c5aed9d2e2bb76..7c47de0948c173f9a597a6e943c004e6e23e760e 100644 (file)
 #include <QTemporaryFile>
 #include <QTime>
 
+#ifdef _WIN32
+#include <QThread>
+#endif
+
 #include <boost/crc.hpp>
 
 #include <algorithm>
@@ -263,9 +267,22 @@ bool FileName::renameTo(FileName const & name) const
 bool FileName::moveTo(FileName const & name) const
 {
        LYXERR(Debug::FILES, "Moving " << *this << " to " << name);
+#ifdef _WIN32
+       // there's a locking problem on Windows sometimes, so
+       // we will keep trying for five seconds, in the hope
+       // that clears.
+       bool removed = QFile::remove(name.d->fi.absoluteFilePath());
+       int tries = 1;
+       while (!removed && tries < 6)   {
+               QThread::sleep(1);
+               removed = QFile::remove(name.d->fi.absoluteFilePath());
+               tries++;
+       }
+#else
        QFile::remove(name.d->fi.absoluteFilePath());
+#endif
 
-       bool success = QFile::rename(d->fi.absoluteFilePath(),
+       bool const success = QFile::rename(d->fi.absoluteFilePath(),
                name.d->fi.absoluteFilePath());
        if (!success)
                LYXERR0("Could not move file " << *this << " to " << name);