Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > db680851aa9db923c397069e4f79cf60 > files > 26

kdelibs-4.6.5-11.fc15.src.rpm

commit 865e5fa4108bb3f470b9424ec34dc573d97e2473
Author: David Faure <faure@kde.org>
Date:   Wed Aug 24 10:29:09 2011 +0200

    Fix fd leak in KLockFile
    
    Didn't expect that after open(fd), QFile::close doesn't close the fd :)

diff --git a/kdecore/io/klockfile_unix.cpp b/kdecore/io/klockfile_unix.cpp
index fa2eda4..93e92e2 100644
--- a/kdecore/io/klockfile_unix.cpp
+++ b/kdecore/io/klockfile_unix.cpp
@@ -78,6 +78,7 @@ public:
         : staleTime(30), // 30 seconds
           isLocked(false),
           linkCountSupport(true),
+          mustCloseFd(false),
           m_pid(-1),
           m_componentData(c)
     {
@@ -102,6 +103,7 @@ public:
     int staleTime;
     bool isLocked;
     bool linkCountSupport;
+    bool mustCloseFd;
     QTime staleTimer;
     KDE_struct_stat statBuf;
     int m_pid;
@@ -285,7 +287,10 @@ KLockFile::LockResult KLockFile::Private::lockFileOExcl(KDE_struct_stat &st_buf)
     if (!m_file.open(fd, QIODevice::WriteOnly)) {
         return LockError;
     }
+    mustCloseFd = true;
     writeIntoLockFile(m_file, m_componentData);
+
+    // stat to get the modification time
     const int result = KDE_lstat(QFile::encodeName(m_fileName), &st_buf);
     if (result != 0)
         return KLockFile::LockError;
@@ -476,6 +481,10 @@ void KLockFile::unlock()
   if (d->isLocked)
   {
      ::unlink(QFile::encodeName(d->m_fileName));
+      if (d->mustCloseFd) {
+         close(d->m_file.handle());
+         d->mustCloseFd = false;
+     }
      d->m_file.close();
      d->m_pid = -1;
      d->isLocked = false;