diff options
author | hjk <hjk@theqtcompany.com> | 2015-03-03 11:11:08 +0100 |
---|---|---|
committer | hjk <hjk@theqtcompany.com> | 2015-03-05 09:38:51 +0000 |
commit | dd06d036616b3f3de852ea51989d9b4944417c1c (patch) | |
tree | 53b9f7f0af6eadd3b3b3b0afa96dcb709c911eea /src/corelib | |
parent | b35c389b6a2e3f4311047875893eb8e94b2415aa (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')
-rw-r--r-- | src/corelib/io/qlockfile_unix.cpp | 12 |
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() |