[Digikam-devel] [digikam] [Bug 326525] Severe memory leak during maintainance scan for rebuild thumbnails
Gilles Caulier
caulier.gilles at gmail.com
Fri Nov 8 08:19:50 GMT 2013
https://bugs.kde.org/show_bug.cgi?id=326525
--- Comment #66 from Gilles Caulier <caulier.gilles at gmail.com> ---
Rapahel,
I don't check your change about OpenMP support, but now, crash cannot be
reproduced as explained in comment #35. I can run qtpgftest command line tool :
[gilles at localhost tests]$ ./qtpgftest
unnamed app(22268)/digikam (core) main: Using LibPGF version: "6.13.45"
unnamed app(22268)/digikam (core) main: Using OpenMP with LibPGF : yes
unnamed app(22268)/digikam (core) main: Generate PGF file using file stream
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
RGB => ARGB
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
PGF image settings:
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
width: 256
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
height: 170
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
nLevels: 0
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
quality: 0
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
bpp: 32
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
channels: 4
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
mode: 17
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
usedBitsPerChannel: 0
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageFile: file
size written : 80806
unnamed app(22268)/digikam (core) main: Generate PGF file using data stream
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageData: PGF
stream memory allocation in bytes: 174080
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
RGB => ARGB
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
PGF image settings:
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
width: 256
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
height: 170
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
nLevels: 0
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
quality: 0
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
bpp: 32
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
channels: 4
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
mode: 17
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageDataToStream:
usedBitsPerChannel: 0
unnamed app(22268)/digikam (core) Digikam::PGFUtils::writePGFImageData: data
size written : 80806
unnamed app(22268)/digikam (core) main: PGF Encoding time: 0.08 s
unnamed app(22268)/digikam (core) main: Load PGF file generated by data stream
unnamed app(22268)/digikam (core) Digikam::PGFUtils::readPGFImageData: image
data stream size is : 80806
unnamed app(22268)/digikam (core) Digikam::PGFUtils::readPGFImageData: PGF
image is open
unnamed app(22268)/digikam (core) Digikam::PGFUtils::readPGFImageData: PGF
image is read
unnamed app(22268)/digikam (core) Digikam::PGFUtils::readPGFImageData: PGF
image is decoded
unnamed app(22268)/digikam (core) main: PGF Decoding time: 0.1 s
unnamed app(22268)/digikam (core) main: Generate JPG file to compare
performances
unnamed app(22268)/digikam (core) main: JPG Encoding time: 0 s
unnamed app(22268)/digikam (core) main: JPG Decoding time: 0 s
unnamed app(22268)/digikam (core) main: Generate PNG file to compare
performances
unnamed app(22268)/digikam (core) main: PNG Encoding time: 0.01 s
libpng warning: Unknown iTXt compression type or method
unnamed app(22268)/digikam (core) main: PNG Decoding time: 0 s
[gilles at localhost tests]$
But valgrind report few traces about memory leak when OpenMP support is enabled
:
[gilles at localhost tests]$ valgrind --tool=memcheck --leak-check=full
--error-limit=no ./qtpgftest
==22448== Memcheck, a memory error detector
==22448== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==22448== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==22448== Command: ./qtpgftest
==22448==
...
==22448==
==22448== HEAP SUMMARY:
==22448== in use at exit: 2,219,171 bytes in 470 blocks
==22448== total heap usage: 23,798 allocs, 23,328 frees, 39,735,306 bytes
allocated
...
==22448== 2,464 bytes in 7 blocks are possibly lost in loss record 247 of 260
==22448== at 0x4C26DFF: calloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==22448== by 0x4011008: _dl_allocate_tls (in /usr/lib64/ld-2.17.so)
==22448== by 0x59CB8B8: pthread_create@@GLIBC_2.2.5 (in
/usr/lib64/libpthread-2.17.so)
==22448== by 0x4E38CBD: ??? (in /usr/lib64/libgomp.so.1.0.0)
==22448== by 0x40AD03: CPGFImage::WriteHeader(CPGFStream*)
(PGFimage.cpp:930)
==22448== by 0x40B7C0: CPGFImage::Write(CPGFStream*, unsigned int*, bool
(*)(double, bool, void*), void*) (PGFimage.cpp:1167)
==22448== by 0x417611: Digikam::PGFUtils::writePGFImageDataToStream(QImage
const&, CPGFStream&, int, unsigned int&, bool) (pgfutils.cpp:288)
==22448== by 0x4167B3: Digikam::PGFUtils::writePGFImageFile(QImage const&,
QString const&, int, bool) (pgfutils.cpp:152)
==22448== by 0x402992: main (qtpgftest.cpp:63)
...
==22448== 1,032,472 bytes in 7 blocks are definitely lost in loss record 259 of
260
==22448== at 0x4C285F1: operator new(unsigned long) (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==22448== by 0x40686A: CEncoder::CEncoder(CPGFStream*, PGFPreHeader,
PGFHeader, PGFPostHeader const&, unsigned long long&, bool) (Encoder.cpp:101)
==22448== by 0x40AE60: CPGFImage::WriteHeader(CPGFStream*)
(PGFimage.cpp:982)
==22448== by 0x40B7C0: CPGFImage::Write(CPGFStream*, unsigned int*, bool
(*)(double, bool, void*), void*) (PGFimage.cpp:1167)
==22448== by 0x417611: Digikam::PGFUtils::writePGFImageDataToStream(QImage
const&, CPGFStream&, int, unsigned int&, bool) (pgfutils.cpp:288)
==22448== by 0x416ABD: Digikam::PGFUtils::writePGFImageData(QImage const&,
QByteArray&, int, bool) (pgfutils.cpp:184)
==22448== by 0x402AF3: main (qtpgftest.cpp:74)
==22448==
==22448== 1,032,472 bytes in 7 blocks are definitely lost in loss record 260 of
260
==22448== at 0x4C285F1: operator new(unsigned long) (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==22448== by 0x40686A: CEncoder::CEncoder(CPGFStream*, PGFPreHeader,
PGFHeader, PGFPostHeader const&, unsigned long long&, bool) (Encoder.cpp:101)
==22448== by 0x40AE60: CPGFImage::WriteHeader(CPGFStream*)
(PGFimage.cpp:982)
==22448== by 0x40B7C0: CPGFImage::Write(CPGFStream*, unsigned int*, bool
(*)(double, bool, void*), void*) (PGFimage.cpp:1167)
==22448== by 0x417611: Digikam::PGFUtils::writePGFImageDataToStream(QImage
const&, CPGFStream&, int, unsigned int&, bool) (pgfutils.cpp:288)
==22448== by 0x4167B3: Digikam::PGFUtils::writePGFImageFile(QImage const&,
QString const&, int, bool) (pgfutils.cpp:152)
==22448== by 0x402992: main (qtpgftest.cpp:63)
==22448==
==22448== LEAK SUMMARY:
==22448== definitely lost: 2,066,960 bytes in 35 blocks
==22448== indirectly lost: 7,540 bytes in 63 blocks
==22448== possibly lost: 2,464 bytes in 7 blocks
==22448== still reachable: 142,207 bytes in 365 blocks
==22448== suppressed: 0 bytes in 0 blocks
==22448== Reachable blocks (those to which a pointer was found) are not shown.
==22448== To see them, rerun with: --leak-check=full --show-reachable=yes
==22448==
==22448== For counts of detected and suppressed errors, rerun with: -v
==22448== ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 2 from 2)
[gilles at localhost tests]$
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the Digikam-devel
mailing list