summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2015-03-03 11:11:08 +0100
committerhjk <hjk@theqtcompany.com>2015-03-05 09:38:51 +0000
commitdd06d036616b3f3de852ea51989d9b4944417c1c (patch)
tree53b9f7f0af6eadd3b3b3b0afa96dcb709c911eea /src/corelib/io
parentb35c389b6a2e3f4311047875893eb8e94b2415aa (diff)
QLockFile: Avoid zero-sized lock file on write error
Failure to write into a successfully opened lock file left the lock file with size 0 in the filesystem. Task-number: QTBUG-44771 Change-Id: I561bf629b9f160174d658bf105be828f71d78ff9 Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/io')
-rw-r--r--src/corelib/io/qlockfile_unix.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/corelib/io/qlockfile_unix.cpp b/src/corelib/io/qlockfile_unix.cpp
index 5719d899a0..1c8da607a7 100644
--- a/src/corelib/io/qlockfile_unix.cpp
+++ b/src/corelib/io/qlockfile_unix.cpp
@@ -157,13 +157,17 @@ QLockFile::LockError QLockFilePrivate::tryLock_sys()
if (!setNativeLocks(fd))
qWarning() << "setNativeLocks failed:" << strerror(errno);
+ if (qt_write_loop(fd, fileData.constData(), fileData.size()) < fileData.size()) {
+ close(fd);
+ if (!QFile::remove(fileName))
+ qWarning("QLockFile: Could not remove our own lock file %s.", qPrintable(fileName));
+ return QLockFile::UnknownError; // partition full
+ }
+
// We hold the lock, continue.
fileHandle = fd;
- QLockFile::LockError error = QLockFile::NoError;
- if (qt_write_loop(fd, fileData.constData(), fileData.size()) < fileData.size())
- error = QLockFile::UnknownError; // partition full
- return error;
+ return QLockFile::NoError;
}
bool QLockFilePrivate::removeStaleLock()