summaryrefslogtreecommitdiffstats
path: root/source/l/qt/QTBUG-14724_close_orphaned_file_descriptors_after_printing.patch
blob: 9acae10c8fef3e0095c960c2e1feeb9e4b78668c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Description:
 QPainter together with QPrinter leaves a lot of temporary files in
 /tmp with every printout. That is a problem for embedded devices,
 which have not such a large /tmp-partition. We are using 80 MByte as
 tmpfs, i.e. in RAM. After some printounts cups deactivates the printer
 because there is no space to copy the temporary files to /tmp.

 What happened: In QPdfBaseEnginePrivate::openPrintDevice() noone
 remembers the file descriptor opened by tempFile() which is a call to
 the cups library to cupsTempFile()

 Later in closePrintDevice the check for fd<0 fails, so no one closes
 the file descriptor. If you later remove the file, the descriptor is
 still open and cannot removed until you close the application.

 If you print 20 times and more during your application is running and
 you print out large files (complicate forms with a lot of elements
 produces files with 3-4 MByte) your temporary file can be full, but
 you don't see (with ls) files in it.

Bug: https://bugreports.qt.nokia.com/browse/QTBUG-14724
Author: Georg Scherzer

---
 src/gui/painting/qpdf.cpp |    1 +
 1 file changed, 1 insertion(+)

--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -1686,6 +1686,7 @@ bool QPdfBaseEnginePrivate::openPrintDev
         cupsTempFile = ret.second;
         outDevice = new QFile();
         static_cast<QFile *>(outDevice)->open(ret.first, QIODevice::WriteOnly);
+        fd = ret.first;
 #endif
 #ifndef QT_NO_LPR
     } else {