summaryrefslogtreecommitdiffstats
path: root/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-05-11 06:30:34 (GMT)
committeraxis <qt-info@nokia.com>2009-05-11 06:30:34 (GMT)
commit804a0ff4ad8c27ece2d403b8d9a4f6f65cdcf867 (patch)
tree0258fb5f685ccaa710f8ea8ec9da9b6aa9f91d35 /tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp
parentefb3e7288eec748db11c35de87239a1eff4d457c (diff)
parent842ba1b3878c2973b24936b18a7ee55bdd980be6 (diff)
downloadQt-804a0ff4ad8c27ece2d403b8d9a4f6f65cdcf867.zip
Qt-804a0ff4ad8c27ece2d403b8d9a4f6f65cdcf867.tar.gz
Qt-804a0ff4ad8c27ece2d403b8d9a4f6f65cdcf867.tar.bz2
Merge branch '4.5' of git@scm.dev.nokia.troll.no:qt/qt
Conflicts: tests/auto/qtemporaryfile/qtemporaryfile.pro
Diffstat (limited to 'tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp')
-rw-r--r--tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp
index c5afe04..8cae64e 100644
--- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp
+++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp
@@ -51,6 +51,13 @@
#if defined(Q_OS_WIN)
# include <windows.h>
#endif
+#if defined(Q_OS_UNIX)
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <errno.h>
+# include <fcntl.h> // open(2)
+# include <unistd.h> // close(2)
+#endif
//TESTED_CLASS=
//TESTED_FILES=
@@ -78,6 +85,7 @@ private slots:
void openOnRootDrives();
void stressTest();
void rename();
+ void renameFdLeak();
public:
};
@@ -356,5 +364,42 @@ void tst_QTemporaryFile::rename()
QVERIFY(!dir.exists("temporary-file.txt"));
}
+void tst_QTemporaryFile::renameFdLeak()
+{
+#ifdef Q_OS_UNIX
+ // Test this on Unix only
+
+ // Open a bunch of files to force the fd count to go up
+ static const int count = 10;
+ int bunch_of_files[count];
+ for (int i = 0; i < count; ++i) {
+ bunch_of_files[i] = ::open(SRCDIR "tst_qtemporaryfile.cpp", O_RDONLY);
+ QVERIFY(bunch_of_files[i] != -1);
+ }
+
+ int fd;
+ {
+ QTemporaryFile file;
+ file.setAutoRemove(false);
+ QVERIFY(file.open());
+
+ // close the bunch of files
+ for (int i = 0; i < count; ++i)
+ ::close(bunch_of_files[i]);
+
+ // save the file descriptor for later
+ fd = file.handle();
+
+ // rename the file to something
+ QString newPath = QDir::tempPath() + "/tst_qtemporaryfile-renameFdLeak-" + QString::number(getpid());
+ file.rename(newPath);
+ QFile::remove(newPath);
+ }
+
+ // check if QTemporaryFile closed the file
+ QVERIFY(::close(fd) == -1 && errno == EBADF);
+#endif
+}
+
QTEST_MAIN(tst_QTemporaryFile)
#include "tst_qtemporaryfile.moc"