Summary: | Crash while trying to select a range of dates in timeline view | ||
---|---|---|---|
Product: | [Applications] digikam | Reporter: | Julien Narboux <Julien> |
Component: | ColorManagement-Backend | Assignee: | Digikam Developers <digikam-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | andrew.i.coles, caulier.gilles, fisiu82, gimgimno0, Julien, lehis, philippe.quaglia, tcaswell, thcs2000 |
Priority: | NOR | ||
Version: | 2.0.0 | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 2.3.0 | |
Sentry Crash Report: | |||
Attachments: |
New crash information added by DrKonqi
New crash information added by DrKonqi New crash information added by DrKonqi |
Description
Julien Narboux
2011-01-04 14:46:54 UTC
Created attachment 55551 [details]
New crash information added by DrKonqi
digikam (2.0.0-beta1) on KDE Platform 4.5.1 (KDE 4.5.1) using Qt 4.7.0
- What I was doing when the application crashed:
Select dates in time line view, here is another trace if it helps.
-- Backtrace (Reduced):
#7 _int_malloc (av=<value optimized out>, bytes=<value optimized out>) at malloc.c:4439
#8 0x024cbf33 in __libc_malloc (bytes=192) at malloc.c:3660
[...]
#10 0x021b8b09 in QFile::QFile (this=0xbfa92e00, name=...) at io/qfile.cpp:384
#11 0x079c7d6f in Digikam::IccProfile::data (this=0xbfa92e8c) at /home/jnarboux/digikam-2.0.0-beta1/core/libs/dimg/filters/icc/iccprofile.cpp:289
#12 0x079c7f8c in Digikam::IccProfile::open (this=0xbfa92e8c) at /home/jnarboux/digikam-2.0.0-beta1/core/libs/dimg/filters/icc/iccprofile.cpp:324
#7 _int_malloc (av=<value optimized out>, bytes=<value optimized out>) at malloc.c:4439 #8 0x024cbf33 in __libc_malloc (bytes=192) at malloc.c:3660 #9 0x06251619 in operator new(unsigned int) () from /usr/lib/libstdc++.so.6 #10 0x021b8b09 in QFile::QFile (this=0xbfa92e00, name=...) at io/qfile.cpp:384 #11 0x079c7d6f in Digikam::IccProfile::data (this=0xbfa92e8c) at /home/jnarboux/digikam-2.0.0-beta1/core/libs/dimg/filters/icc/iccprofile.cpp:289 #12 0x079c7f8c in Digikam::IccProfile::open (this=0xbfa92e8c) at /home/jnarboux/digikam-2.0.0-beta1/core/libs/dimg/filters/icc/iccprofile.cpp:324 #13 0x079c5925 in Digikam::IccManager::displayProfile (displayingWidget=0xa2c1a18) at /home/jnarboux/digikam-2.0.0-beta1/core/libs/dimg/filters/icc/iccmanager.cpp:384 It's a crash from Color management, not Timeline tool. Sound like a problem with an ICC profile extracted from an image. Gilles Caulier Crash is from the "new" in this line: QFile::QFile(const QString &name) : QIODevice(*new QFilePrivate, 0) trying to open the display profile's file, which is probably sRGB. So no real reason why it should crash. Julien, if you find time, does valgrind give any information if you crash digikam running under valgrind? Created attachment 55646 [details]
New crash information added by DrKonqi
digikam (2.0.0-beta1 (rev.: 1212218)) on KDE Platform 4.5.1 (KDE 4.5.1) using Qt 4.7.0
- What I was doing when the application crashed:
I was selecting a range of dates in timeline view.
Here is another backtrace if it helps.
I can not reproduce the bug under valgring...
-- Backtrace (Reduced):
#7 _int_malloc (av=<value optimized out>, bytes=<value optimized out>) at malloc.c:4439
#8 0x01abaf33 in __libc_malloc (bytes=1776) at malloc.c:3660
#9 0x08e1611d in qMalloc (size=1776) at global/qmalloc.cpp:55
#10 0x08e77025 in QVectorData::allocate (size=28984256, alignment=141576) at tools/qvector.cpp:67
#11 0x023d7413 in QVector<Digikam::ImageInfo>::malloc(int) () from /usr/lib/libdigikamdatabase.so.2
Strange. Now the trace is different... and not relevant of CM. Can you reproduce this crash with 1.8.0 (trunk code) ? (using the same collection of course) Gilles Caulier Two completely unrelated backtraces, with no good reason to crash, happening after a third, completely unrelated action: Indicative that the latter action (or any action triggered by it) is causing memory corruption. Very difficult to debug if valgrind tells nothing... Marcel, Valgrind gives the following errors: ==29225== Thread 11: ==29225== Conditional jump or move depends on uninitialised value(s) ==29225== at 0x10460F92: picReadHeader(QIODevice*, PICHeader*, bool) (pic_read.cpp:54) ==29225== by 0x104625D4: SoftimagePICHandler::canRead(QIODevice*) (pic_io_handler.cpp:44) ==29225== by 0x1046210A: SoftimagePICPlugin::capabilities(QIODevice*, QByteArray const&) const (pic_io_plugin.cpp:33) ==29225== by 0x634A426: createReadHandlerHelper(QIODevice*, QByteArray const&, bool, bool) (qimagereader.cpp:393) ==29225== by 0x634BD50: QImageReaderPrivate::initHandler() (qimagereader.cpp:618) ==29225== by 0x634D5EF: QImageReader::read(QImage*) (qimagereader.cpp:1185) ==29225== by 0x634D876: QImageReader::read() (qimagereader.cpp:1155) ==29225== by 0x6337D97: QImage::fromData(unsigned char const*, int, char const*) (qimage.cpp:5032) ==29225== by 0x633BEA9: QImage::loadFromData(unsigned char const*, int, char const*) (qimage.cpp:4990) ==29225== by 0x490D1B0: QImage::loadFromData(QByteArray const&, char const*) (qimage.h:243) ==29225== by 0x490C938: KExiv2Iface::KExiv2::getImagePreview(QImage&) const (kexiv2image.cpp:843) ==29225== by 0x5320D85: Digikam::ThumbnailCreator::loadImagePreview(Digikam::DMetadata const&) const (thumbnailcreator.cpp:605) ==29225== Thread 1: ==29225== Conditional jump or move depends on uninitialised value(s) ==29225== at 0x64267E4: PtsToRegion(int, int, _POINTBLOCK*, QRegionPrivate*) (qregion.cpp:3512) ==29225== by 0x64272F7: PolygonRegion(QPoint const*, int, int) (qregion.cpp:3735) ==29225== by 0x64279BD: QRegion::QRegion(QPolygon const&, Qt::FillRule) (qregion.cpp:3856) ==29225== by 0x64A79B8: QX11PaintEngine::updateState(QPaintEngineState const&) (qpaintengine_x11.cpp:1092) ==29225== by 0x63D2153: QPainterPrivate::updateStateImpl(QPainterState*) (qpainter.cpp:906) ==29225== by 0x63D221B: QPainterPrivate::updateState(QPainterState*) (qpainter.cpp:934) ==29225== by 0x63D97CF: QPainter::setClipRegion(QRegion const&, Qt::ClipOperation) (qpainter.cpp:2853) ==29225== by 0x62C6436: QWidgetPrivate::paintBackground(QPainter*, QRegion const&, int) const (qwidget.cpp:2338) ==29225== by 0x62C73EC: QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (qwidget.cpp:5398) ==29225== by 0x64B7C73: QWidgetBackingStore::sync() (qbackingstore.cpp:1328) ==29225== by 0x62B92B2: QWidgetPrivate::syncBackingStore() (qwidget.cpp:1805) ==29225== by 0x62C0465: QWidget::event(QEvent*) (qwidget.cpp:8480) ==29225== ==29225== Conditional jump or move depends on uninitialised value(s) ==29225== at 0x64267E4: PtsToRegion(int, int, _POINTBLOCK*, QRegionPrivate*) (qregion.cpp:3512) ==29225== by 0x64272F7: PolygonRegion(QPoint const*, int, int) (qregion.cpp:3735) ==29225== by 0x64279BD: QRegion::QRegion(QPolygon const&, Qt::FillRule) (qregion.cpp:3856) ==29225== by 0x64A7CCC: QX11PaintEngine::updateState(QPaintEngineState const&) (qpaintengine_x11.cpp:1110) ==29225== by 0x63D2153: QPainterPrivate::updateStateImpl(QPainterState*) (qpainter.cpp:906) ==29225== by 0x63D221B: QPainterPrivate::updateState(QPainterState*) (qpainter.cpp:934) ==29225== by 0x63D97CF: QPainter::setClipRegion(QRegion const&, Qt::ClipOperation) (qpainter.cpp:2853) ==29225== by 0x62C6436: QWidgetPrivate::paintBackground(QPainter*, QRegion const&, int) const (qwidget.cpp:2338) ==29225== by 0x62C73EC: QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (qwidget.cpp:5398) ==29225== by 0x64B7C73: QWidgetBackingStore::sync() (qbackingstore.cpp:1328) ==29225== by 0x62B92B2: QWidgetPrivate::syncBackingStore() (qwidget.cpp:1805) ==29225== by 0x62C0465: QWidget::event(QEvent*) (qwidget.cpp:8480) *** Bug 263002 has been marked as a duplicate of this bug. *** Okay I can reproduce this one with digikam 2.0 from SVN. The trick is to switch between months before the view has finished updating. Valgrind gives: ==22113== Thread 1: ==22113== Invalid read of size 4 ==22113== at 0x565494D: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (qbasicatomic.h:85) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x56D8407: Digikam::ImageModel::removeRowPairs(QList<QPair<int, int> > const&) (qlist.h:376) ==22113== by 0x56DA33E: Digikam::ImageModel::finishIncrementalRefresh() (imagemodel.cpp:670) ==22113== by 0x81C2B16: Digikam::ImageAlbumModel::slotResult(KJob*) (imagealbummodel.cpp:308) ==22113== by 0x81C3650: Digikam::ImageAlbumModel::qt_metacall(QMetaObject::Call, int, void**) (imagealbummodel.moc:117) ==22113== by 0x71E18C9: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (qmetaobject.cpp:237) ==22113== by 0x71F46AC: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3280) ==22113== by 0x6EEDDA2: KJob::result(KJob*) (kjob.moc:194) ==22113== by 0x6EEE107: KJob::emitResult() (kjob.cpp:312) ==22113== by 0x5A9A0EF: KIO::SimpleJob::slotFinished() (job.cpp:525) ==22113== by 0x5A9AA4B: KIO::TransferJob::slotFinished() (job.cpp:1118) ==22113== Address 0xdca7d60 is 0 bytes inside a block of size 96 free'd ==22113== at 0x4025504: operator delete(void*) (vg_replace_malloc.c:387) ==22113== by 0x56549DF: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (imageinfocache.cpp:91) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x564555A: Digikam::DatabaseThumbnailInfoProvider::thumbnailInfo(QString const&) (databasethumbnailinfoprovider.cpp:76) ==22113== by 0x534C52D: Digikam::ThumbnailCreator::makeThumbnailInfo(QString const&, QRect const&) const (thumbnailcreator.cpp:345) ==22113== by 0x534DBC0: Digikam::ThumbnailCreator::load(QString const&, QRect const&, bool) const (thumbnailcreator.cpp:225) ==22113== by 0x534E5BA: Digikam::ThumbnailCreator::pregenerate(QString const&) const (thumbnailcreator.cpp:180) ==22113== by 0x53592EC: Digikam::ThumbnailLoadingTask::execute() (thumbnailtask.cpp:79) ==22113== by 0x532CE02: Digikam::LoadSaveThread::run() (loadsavethread.cpp:117) ==22113== by 0x537ADEF: Digikam::DynamicThread::DynamicThreadPriv::run() (dynamicthread.cpp:323) ==22113== by 0x70CE522: QThreadPoolThread::run() (qthreadpool.cpp:106) ==22113== by 0x70D9DF8: QThreadPrivate::start(void*) (qthread_unix.cpp:266) ==22113== ==22113== Invalid read of size 1 ==22113== at 0x5654960: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (imageinfocache.cpp:89) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x56D8407: Digikam::ImageModel::removeRowPairs(QList<QPair<int, int> > const&) (qlist.h:376) ==22113== by 0x56DA33E: Digikam::ImageModel::finishIncrementalRefresh() (imagemodel.cpp:670) ==22113== by 0x81C2B16: Digikam::ImageAlbumModel::slotResult(KJob*) (imagealbummodel.cpp:308) ==22113== by 0x81C3650: Digikam::ImageAlbumModel::qt_metacall(QMetaObject::Call, int, void**) (imagealbummodel.moc:117) ==22113== by 0x71E18C9: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (qmetaobject.cpp:237) ==22113== by 0x71F46AC: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3280) ==22113== by 0x6EEDDA2: KJob::result(KJob*) (kjob.moc:194) ==22113== by 0x6EEE107: KJob::emitResult() (kjob.cpp:312) ==22113== by 0x5A9A0EF: KIO::SimpleJob::slotFinished() (job.cpp:525) ==22113== by 0x5A9AA4B: KIO::TransferJob::slotFinished() (job.cpp:1118) ==22113== Address 0xdca7dbd is 93 bytes inside a block of size 96 free'd ==22113== at 0x4025504: operator delete(void*) (vg_replace_malloc.c:387) ==22113== by 0x56549DF: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (imageinfocache.cpp:91) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x564555A: Digikam::DatabaseThumbnailInfoProvider::thumbnailInfo(QString const&) (databasethumbnailinfoprovider.cpp:76) ==22113== by 0x534C52D: Digikam::ThumbnailCreator::makeThumbnailInfo(QString const&, QRect const&) const (thumbnailcreator.cpp:345) ==22113== by 0x534DBC0: Digikam::ThumbnailCreator::load(QString const&, QRect const&, bool) const (thumbnailcreator.cpp:225) ==22113== by 0x534E5BA: Digikam::ThumbnailCreator::pregenerate(QString const&) const (thumbnailcreator.cpp:180) ==22113== by 0x53592EC: Digikam::ThumbnailLoadingTask::execute() (thumbnailtask.cpp:79) ==22113== by 0x532CE02: Digikam::LoadSaveThread::run() (loadsavethread.cpp:117) ==22113== by 0x537ADEF: Digikam::DynamicThread::DynamicThreadPriv::run() (dynamicthread.cpp:323) ==22113== by 0x70CE522: QThreadPoolThread::run() (qthreadpool.cpp:106) ==22113== by 0x70D9DF8: QThreadPrivate::start(void*) (qthread_unix.cpp:266) ==22113== ==22113== Invalid read of size 4 ==22113== at 0x56559AE: QHash<long long, Digikam::ImageInfoData*>::findNode(long long const&, unsigned int*) const (qhash.h:879) ==22113== by 0x5654A30: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (qhash.h:788) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x56D8407: Digikam::ImageModel::removeRowPairs(QList<QPair<int, int> > const&) (qlist.h:376) ==22113== by 0x56DA33E: Digikam::ImageModel::finishIncrementalRefresh() (imagemodel.cpp:670) ==22113== by 0x81C2B16: Digikam::ImageAlbumModel::slotResult(KJob*) (imagealbummodel.cpp:308) ==22113== by 0x81C3650: Digikam::ImageAlbumModel::qt_metacall(QMetaObject::Call, int, void**) (imagealbummodel.moc:117) ==22113== by 0x71E18C9: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (qmetaobject.cpp:237) ==22113== by 0x71F46AC: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3280) ==22113== by 0x6EEDDA2: KJob::result(KJob*) (kjob.moc:194) ==22113== by 0x6EEE107: KJob::emitResult() (kjob.cpp:312) ==22113== by 0x5A9A0EF: KIO::SimpleJob::slotFinished() (job.cpp:525) ==22113== Address 0xdca7d68 is 8 bytes inside a block of size 96 free'd ==22113== at 0x4025504: operator delete(void*) (vg_replace_malloc.c:387) ==22113== by 0x56549DF: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (imageinfocache.cpp:91) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x564555A: Digikam::DatabaseThumbnailInfoProvider::thumbnailInfo(QString const&) (databasethumbnailinfoprovider.cpp:76) ==22113== by 0x534C52D: Digikam::ThumbnailCreator::makeThumbnailInfo(QString const&, QRect const&) const (thumbnailcreator.cpp:345) ==22113== by 0x534DBC0: Digikam::ThumbnailCreator::load(QString const&, QRect const&, bool) const (thumbnailcreator.cpp:225) ==22113== by 0x534E5BA: Digikam::ThumbnailCreator::pregenerate(QString const&) const (thumbnailcreator.cpp:180) ==22113== by 0x53592EC: Digikam::ThumbnailLoadingTask::execute() (thumbnailtask.cpp:79) ==22113== by 0x532CE02: Digikam::LoadSaveThread::run() (loadsavethread.cpp:117) ==22113== by 0x537ADEF: Digikam::DynamicThread::DynamicThreadPriv::run() (dynamicthread.cpp:323) ==22113== by 0x70CE522: QThreadPoolThread::run() (qthreadpool.cpp:106) ==22113== by 0x70D9DF8: QThreadPrivate::start(void*) (qthread_unix.cpp:266) ==22113== ==22113== Invalid read of size 4 ==22113== at 0x56559B0: QHash<long long, Digikam::ImageInfoData*>::findNode(long long const&, unsigned int*) const (qhash.h:879) ==22113== by 0x5654A30: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (qhash.h:788) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x56D8407: Digikam::ImageModel::removeRowPairs(QList<QPair<int, int> > const&) (qlist.h:376) ==22113== by 0x56DA33E: Digikam::ImageModel::finishIncrementalRefresh() (imagemodel.cpp:670) ==22113== by 0x81C2B16: Digikam::ImageAlbumModel::slotResult(KJob*) (imagealbummodel.cpp:308) ==22113== by 0x81C3650: Digikam::ImageAlbumModel::qt_metacall(QMetaObject::Call, int, void**) (imagealbummodel.moc:117) ==22113== by 0x71E18C9: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (qmetaobject.cpp:237) ==22113== by 0x71F46AC: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3280) ==22113== by 0x6EEDDA2: KJob::result(KJob*) (kjob.moc:194) ==22113== by 0x6EEE107: KJob::emitResult() (kjob.cpp:312) ==22113== by 0x5A9A0EF: KIO::SimpleJob::slotFinished() (job.cpp:525) ==22113== Address 0xdca7d6c is 12 bytes inside a block of size 96 free'd ==22113== at 0x4025504: operator delete(void*) (vg_replace_malloc.c:387) ==22113== by 0x56549DF: Digikam::ImageInfoCache::dropInfo(Digikam::ImageInfoData*) (imageinfocache.cpp:91) ==22113== by 0x5652288: Digikam::ImageInfo::~ImageInfo() (imageinfo.cpp:212) ==22113== by 0x564555A: Digikam::DatabaseThumbnailInfoProvider::thumbnailInfo(QString const&) (databasethumbnailinfoprovider.cpp:76) ==22113== by 0x534C52D: Digikam::ThumbnailCreator::makeThumbnailInfo(QString const&, QRect const&) const (thumbnailcreator.cpp:345) ==22113== by 0x534DBC0: Digikam::ThumbnailCreator::load(QString const&, QRect const&, bool) const (thumbnailcreator.cpp:225) ==22113== by 0x534E5BA: Digikam::ThumbnailCreator::pregenerate(QString const&) const (thumbnailcreator.cpp:180) ==22113== by 0x53592EC: Digikam::ThumbnailLoadingTask::execute() (thumbnailtask.cpp:79) ==22113== by 0x532CE02: Digikam::LoadSaveThread::run() (loadsavethread.cpp:117) ==22113== by 0x537ADEF: Digikam::DynamicThread::DynamicThreadPriv::run() (dynamicthread.cpp:323) ==22113== by 0x70CE522: QThreadPoolThread::run() (qthreadpool.cpp:106) ==22113== by 0x70D9DF8: QThreadPrivate::start(void*) (qthread_unix.cpp:266) ==22113== I can not reproduce this bug with current git trunk. Julien And you Andrew, can you check with last code from Git master and confirm that it's not reproducible ? Gilles Caulier digiKam 2.0.0 RC is out. Please check if crash is reproducible with this version. Thanks in advance Gilles Caulier Created attachment 61957 [details]
New crash information added by DrKonqi
digikam (2.0.0-rc) on KDE Platform 4.6.2 (4.6.2) using Qt 4.7.2
- What I was doing when the application crashed:
I can reproduce this crash using digikam 2.0 rc
-- Backtrace (Reduced):
#7 _int_malloc (av=0x25413c0, bytes=512) at malloc.c:4439
#8 0x02452f53 in __libc_malloc (bytes=512) at malloc.c:3660
#9 0x01a5db8d in qMalloc (size=512) at global/qmalloc.cpp:55
#10 0x01ab9b35 in QVectorData::allocate (size=512, alignment=4) at tools/qvector.cpp:67
#11 0x0417cf2c in malloc (this=0xbdfea14, asize=16, aalloc=31) at ../../include/QtCore/../../src/corelib/tools/qvector.h:393
I can reproduce this bug from git master, but it requires clicking on the timeline rather manically and takes a while to generate. When it does crash there are 20+ threads running and reports corrupted double linked lists. The backtrace is different every time. *** Bug 265245 has been marked as a duplicate of this bug. *** I could reproduce this problem at least once. I suspect a problem in the model (double deletion of ImageInfo). Alternatively, there could be an issue with the ImageInfoCache, but on another thorough review, I could not find a problem. *** Bug 283045 has been marked as a duplicate of this bug. *** *** Bug 281895 has been marked as a duplicate of this bug. *** We have a nice race condition here: ImageInfo::~ImageInfo() { ImageInfoData* olddata = m_data.unassign(); // <- here if (olddata) { ImageInfoStatic::cache()->dropInfo(olddata); } } At the indicated place, another thread can grab the ImageInfoData from the cache, use it, and destroy the ImageInfo. It will then see the ref count dropped to 0 again, and delete it. Returned to the first thread, already deleted data will be deleted. Solution: Do not reuse data with ref count 0. Git commit 35e1ae964ca1cf5a71d81478ad863ba681e15ee3 by Marcel Wiesweg. Committed on 03/10/2011 at 13:58. Pushed by mwiesweg into branch 'master'. Rewrite of the ImageInfoCache infrastructure with fixed crashes and better granularity - apply save atomic operations and drop ImageInfoDatas from the cache if ref count is 0 - remove dependency on the big database lock, use a finer grained readwritelock for ImageInfo - cache image infos by name as well, used for thumbnail info retrieval - rewrite the getter methods in ImageInfo for the ReadWriteLock BUG: 262077 M +2 -1 NEWS M +8 -15 libs/database/databaseaccess.cpp M +0 -6 libs/database/databaseaccess.h M +228 -263 libs/database/imageinfo.cpp M +1 -0 libs/database/imageinfo.h M +125 -29 libs/database/imageinfocache.cpp M +35 -14 libs/database/imageinfocache.h M +37 -4 libs/database/imageinfodata.h http://commits.kde.org/digikam/35e1ae964ca1cf5a71d81478ad863ba681e15ee3 *** Bug 279495 has been marked as a duplicate of this bug. *** |