[Digikam-devel] [digikam] [Bug 326525] Severe memory leak during maintainance scan for rebuild thumbnails

Gilles Caulier caulier.gilles at gmail.com
Sat Oct 26 09:22:19 BST 2013


https://bugs.kde.org/show_bug.cgi?id=326525

Gilles Caulier <caulier.gilles at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rschweizer at schweizer-inform
                   |                            |atik.ch

--- Comment #25 from Gilles Caulier <caulier.gilles at gmail.com> ---
Raphael,

In same way that thumb cache memory allocation problem from digiKam core, we
have also a memory problems with PGF codec :

memory leak :

==7668== 2,208 bytes in 6 blocks are possibly lost in loss record 25,044 of
25,761
==7668==    at 0x4C26DFF: calloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==7668==    by 0x4011008: _dl_allocate_tls (in /usr/lib64/ld-2.17.so)
==7668==    by 0xFD008B8: pthread_create@@GLIBC_2.2.5 (in
/usr/lib64/libpthread-2.17.so)
==7668==    by 0x10AAACBD: ??? (in /usr/lib64/libgomp.so.1.0.0)
==7668==    by 0x80BC413: CPGFImage::WriteHeader(CPGFStream*)
(PGFimage.cpp:924)
==7668==    by 0x80BCE86: CPGFImage::Write(CPGFStream*, unsigned int*, bool
(*)(double, bool, void*), void*) (PGFimage.cpp:1145)
==7668==    by 0x80C876E: Digikam::PGFUtils::writePGFImageDataToStream(QImage
const&, CPGFStream&, int, unsigned int&, bool) (pgfutils.cpp:280)
==7668==    by 0x80C7BF0: Digikam::PGFUtils::writePGFImageData(QImage const&,
QByteArray&, int, bool) (pgfutils.cpp:178)
==7668==    by 0x80A8E99:
Digikam::ThumbnailCreator::storeInDatabase(Digikam::ThumbnailInfo const&,
Digikam::ThumbnailImage const&) const (thumbnailcreator.cpp:695)
==7668==    by 0x80A6818: Digikam::ThumbnailCreator::load(QString const&, QRect
const&, bool) const (thumbnailcreator.cpp:267)
==7668==    by 0x80A63C5: Digikam::ThumbnailCreator::load(QString const&) const
(thumbnailcreator.cpp:199)
==7668==    by 0x80B51F9: Digikam::ThumbnailLoadingTask::execute()
(thumbnailtask.cpp:172)

memory corruption : 

==7668== Thread 16:
==7668== Conditional jump or move depends on uninitialised value(s)
==7668==    at 0x80C47CF: CSubband::Quantize(int) (Subband.cpp:132)
==7668==    by 0x80C5772: CWaveletTransform::ForwardTransform(int, int)
(WaveletTransform.cpp:164)
==7668==    by 0x80C3023: CPGFImage::WriteHeader(CPGFStream*) [clone
._omp_fn.0] (PGFimage.cpp:949)
==7668==    by 0x10AAA809: ??? (in /usr/lib64/libgomp.so.1.0.0)
==7668==    by 0xFCFFD17: start_thread (in /usr/lib64/libpthread-2.17.so)
==7668==    by 0x10FB67CC: clone (in /usr/lib64/libc-2.17.so)
==7668== 
==7668== Conditional jump or move depends on uninitialised value(s)
==7668==    at 0x80C4828: CSubband::Quantize(int) (Subband.cpp:134)
==7668==    by 0x80C5772: CWaveletTransform::ForwardTransform(int, int)
(WaveletTransform.cpp:164)
==7668==    by 0x80C3023: CPGFImage::WriteHeader(CPGFStream*) [clone
._omp_fn.0] (PGFimage.cpp:949)
==7668==    by 0x10AAA809: ??? (in /usr/lib64/libgomp.so.1.0.0)
==7668==    by 0xFCFFD17: start_thread (in /usr/lib64/libpthread-2.17.so)
==7668==    by 0x10FB67CC: clone (in /usr/lib64/libc-2.17.so)
==7668== 
==7668== Thread 14:
==7668== Conditional jump or move depends on uninitialised value(s)
==7668==    at 0x80B8979: CEncoder::WriteValue(CSubband*, int)
(Encoder.cpp:327)
==7668==    by 0x80B8640: CEncoder::Partition(CSubband*, int, int, int, int)
(Encoder.cpp:258)
==7668==    by 0x80C49FB: CSubband::ExtractTile(CEncoder&, bool, unsigned int,
unsigned int) (Subband.cpp:185)
==7668==    by 0x80BC9C4: CPGFImage::WriteLevel() (PGFimage.cpp:1029)
==7668==    by 0x80BCD55: CPGFImage::WriteImage(CPGFStream*, bool (*)(double,
bool, void*), void*) (PGFimage.cpp:1103)
==7668==    by 0x80BCEA1: CPGFImage::Write(CPGFStream*, unsigned int*, bool
(*)(double, bool, void*), void*) (PGFimage.cpp:1148)
==7668==    by 0x80C876E: Digikam::PGFUtils::writePGFImageDataToStream(QImage
const&, CPGFStream&, int, unsigned int&, bool) (pgfutils.cpp:280)
==7668==    by 0x80C7BF0: Digikam::PGFUtils::writePGFImageData(QImage const&,
QByteArray&, int, bool) (pgfutils.cpp:178)
==7668==    by 0x80A8E99:
Digikam::ThumbnailCreator::storeInDatabase(Digikam::ThumbnailInfo const&,
Digikam::ThumbnailImage const&) const (thumbnailcreator.cpp:695)
==7668==    by 0x80A6818: Digikam::ThumbnailCreator::load(QString const&, QRect
const&, bool) const (thumbnailcreator.cpp:267)
==7668==    by 0x80A63C5: Digikam::ThumbnailCreator::load(QString const&) const
(thumbnailcreator.cpp:199)
==7668==    by 0x80B51F9: Digikam::ThumbnailLoadingTask::execute()
(thumbnailtask.cpp:172)
==7668== 
==7668== Conditional jump or move depends on uninitialised value(s)
==7668==    at 0x80B8979: CEncoder::WriteValue(CSubband*, int)
(Encoder.cpp:327)
==7668==    by 0x80B872D: CEncoder::Partition(CSubband*, int, int, int, int)
(Encoder.cpp:283)
==7668==    by 0x80C49FB: CSubband::ExtractTile(CEncoder&, bool, unsigned int,
unsigned int) (Subband.cpp:185)
==7668==    by 0x80BC9C4: CPGFImage::WriteLevel() (PGFimage.cpp:1029)
==7668==    by 0x80BCD55: CPGFImage::WriteImage(CPGFStream*, bool (*)(double,
bool, void*), void*) (PGFimage.cpp:1103)
==7668==    by 0x80BCEA1: CPGFImage::Write(CPGFStream*, unsigned int*, bool
(*)(double, bool, void*), void*) (PGFimage.cpp:1148)
==7668==    by 0x80C876E: Digikam::PGFUtils::writePGFImageDataToStream(QImage
const&, CPGFStream&, int, unsigned int&, bool) (pgfutils.cpp:280)
==7668==    by 0x80C7BF0: Digikam::PGFUtils::writePGFImageData(QImage const&,
QByteArray&, int, bool) (pgfutils.cpp:178)
==7668==    by 0x80A8E99:
Digikam::ThumbnailCreator::storeInDatabase(Digikam::ThumbnailInfo const&,
Digikam::ThumbnailImage const&) const (thumbnailcreator.cpp:695)
==7668==    by 0x80A6818: Digikam::ThumbnailCreator::load(QString const&, QRect
const&, bool) const (thumbnailcreator.cpp:267)
==7668==    by 0x80A63C5: Digikam::ThumbnailCreator::load(QString const&) const
(thumbnailcreator.cpp:199)
==7668==    by 0x80B51F9: Digikam::ThumbnailLoadingTask::execute()
(thumbnailtask.cpp:172)

Sure, memory leak with PGF codec is lesser than thumb cache from digiKam core,
but it exists...

See my comments #16 about Coverity Scan source code reports
(https://scan.coverity.com/) which are fully relevant of this memory
problems...

Gilles Caulier

-- 
You are receiving this mail because:
You are the assignee for the bug.



More information about the Digikam-devel mailing list