blob: 9acae10c8fef3e0095c960c2e1feeb9e4b78668c (
plain)
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 {
|