Summary: | Crash when saving a picture after normalization | ||
---|---|---|---|
Product: | [Applications] digikam | Reporter: | Carsten Niehaus <cniehaus> |
Component: | ImageEditor-Canvas | Assignee: | Digikam Developers <digikam-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | caulier.gilles, toma |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 7.6.0 | |
Sentry Crash Report: | |||
Attachments: | Patch to fix crash when histogram is visible |
Description
Carsten Niehaus
2005-07-31 18:09:57 UTC
I forgot to mention: The file was saved correctly :) Ok, I tried again with another picture, it crashed again. Then I tried it with another filter (sharpnes), again a crash. Here are the new backtraces: Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". `system-supplied DSO at 0xffffe000' has disappeared; keeping its symbols. [Thread debugging using libthread_db enabled] [New Thread -1237484992 (LWP 4854)] [New Thread -1248080976 (LWP 4920)] 0xffffe410 in __kernel_vsyscall () #0 0xffffe410 in __kernel_vsyscall () #1 0xb683100e in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/i686/cmov/libpthread.so.0 #2 0xb6aa7d30 in QThread::wait () from /usr/share/qt3/lib/libqt-mt.so.3 #3 0xb7f2efbc in Digikam::ImageHistogram::stopCalcHistogramValues ( this=0xfffffffc) at imagehistogram.cpp:91 #4 0xb7f2eedd in ~ImageHistogram (this=0x8525008) at imagehistogram.cpp:74 #5 0xb7f8215a in Canvas::updateHistogram (this=0x85393e0) at canvas.cpp:457 #6 0xb7f81c51 in Canvas::load (this=0x85393e0, filename=@0xfffffffc) at canvas.cpp:365 #7 0xb7f9489d in ImageWindow::slotLoadCurrent (this=0x848ad70) at kurl.h:361 #8 0xb7f9ac23 in ImageWindow::qt_invoke (this=0x848ad70, _id=72, _o=0xbfffef80) at imagewindow.moc:213 #9 0xb6b0b067 in QObject::activate_signal () from /usr/share/qt3/lib/libqt-mt.so.3 #10 0xb6e261a5 in QSignal::signal () from /usr/share/qt3/lib/libqt-mt.so.3 #11 0xb6b23ca9 in QSignal::activate () from /usr/share/qt3/lib/libqt-mt.so.3 #12 0xb6b2ad71 in QSingleShotTimer::event () from /usr/share/qt3/lib/libqt-mt.so.3 #13 0xb6ab3370 in QApplication::internalNotify () from /usr/share/qt3/lib/libqt-mt.so.3 #14 0xb6ab29d4 in QApplication::notify () from /usr/share/qt3/lib/libqt-mt.so.3 #15 0xb70c1735 in KApplication::notify (this=0xbffff630, receiver=0x8258720, event=0xbffff390) at kapplication.cpp:549 #16 0xb6aa3858 in QEventLoop::activateTimers () from /usr/share/qt3/lib/libqt-mt.so.3 #17 0xb6a5f95f in QEventLoop::processEvents () from /usr/share/qt3/lib/libqt-mt.so.3 #18 0xb6ac474c in QEventLoop::enterLoop () from /usr/share/qt3/lib/libqt-mt.so.3 #19 0xb6ac460e in QEventLoop::exec () from /usr/share/qt3/lib/libqt-mt.so.3 #20 0xb6ab357b in QApplication::exec () from /usr/share/qt3/lib/libqt-mt.so.3 #21 0x0804a3ea in main (argc=-4, argv=0xfffffffc) at main.cpp:252 Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". `system-supplied DSO at 0xffffe000' has disappeared; keeping its symbols. [Thread debugging using libthread_db enabled] [New Thread -1237484992 (LWP 5515)] [New Thread -1248080976 (LWP 5540)] 0xffffe410 in __kernel_vsyscall () #0 0xffffe410 in __kernel_vsyscall () #1 0xb683100e in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/i686/cmov/libpthread.so.0 #2 0xb6aa7d30 in QThread::wait () from /usr/share/qt3/lib/libqt-mt.so.3 #3 0xb7f2efbc in Digikam::ImageHistogram::stopCalcHistogramValues ( this=0xfffffffc) at imagehistogram.cpp:91 #4 0xb7f2eedd in ~ImageHistogram (this=0x84ddb20) at imagehistogram.cpp:74 #5 0xb7f8215a in Canvas::updateHistogram (this=0x8474bc8) at canvas.cpp:457 #6 0xb7f81c51 in Canvas::load (this=0x8474bc8, filename=@0xfffffffc) at canvas.cpp:365 #7 0xb7f9489d in ImageWindow::slotLoadCurrent (this=0x84734d8) at kurl.h:361 #8 0xb7f9ac23 in ImageWindow::qt_invoke (this=0x84734d8, _id=72, _o=0xbfffef30) at imagewindow.moc:213 #9 0xb6b0b067 in QObject::activate_signal () from /usr/share/qt3/lib/libqt-mt.so.3 #10 0xb6e261a5 in QSignal::signal () from /usr/share/qt3/lib/libqt-mt.so.3 #11 0xb6b23ca9 in QSignal::activate () from /usr/share/qt3/lib/libqt-mt.so.3 #12 0xb6b2ad71 in QSingleShotTimer::event () from /usr/share/qt3/lib/libqt-mt.so.3 #13 0xb6ab3370 in QApplication::internalNotify () from /usr/share/qt3/lib/libqt-mt.so.3 #14 0xb6ab29d4 in QApplication::notify () from /usr/share/qt3/lib/libqt-mt.so.3 #15 0xb70c1735 in KApplication::notify (this=0xbffff5e0, receiver=0x8258c58, event=0xbffff340) at kapplication.cpp:549 #16 0xb6aa3858 in QEventLoop::activateTimers () from /usr/share/qt3/lib/libqt-mt.so.3 #17 0xb6a5f95f in QEventLoop::processEvents () from /usr/share/qt3/lib/libqt-mt.so.3 #18 0xb6ac474c in QEventLoop::enterLoop () from /usr/share/qt3/lib/libqt-mt.so.3 #19 0xb6ac460e in QEventLoop::exec () from /usr/share/qt3/lib/libqt-mt.so.3 #20 0xb6ab357b in QApplication::exec () from /usr/share/qt3/lib/libqt-mt.so.3 #21 0x0804a3ea in main (argc=-4, argv=0xfffffffc) at main.cpp:252 Gilles, can you take a look at this when you get back? Blended histogram is displayed on imageeditor area during saving operations ? Gilles Created attachment 12154 [details]
Patch to fix crash when histogram is visible
The histogram thread holds a pointer to the image data. Under certain
conditions, for eg, saving of image and reloading of image data, this image
data pointer is invalidated. Since the thread still holds a pointer to the
invalid pointer and tries to do calculations on it, the application crashes.
Attached patch deletes the histogram thread before reloading the image
SVN commit 444324 by cgilles: Patch from Owen Hirst to fix crash when histogram is visible. The histogram thread holds a pointer to the image data. Under certain conditions, for eg, saving of image and reloading of image data, this image data pointer is invalidated. Since the thread still holds a pointer to the invalid pointer and tries to do calculations on it, the application crashes. Attached patch deletes the histogram thread before reloading the image CCMAIL: digikam-devel@kde.org CCBUGS: 109946 M +14 -7 canvas.cpp --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas.cpp #444323:444324 @@ -346,6 +346,12 @@ emit signalSelected(false); } + if (d->imageHistogram) + { + delete d->imageHistogram; + d->imageHistogram = 0; + } + viewport()->setUpdatesEnabled(false); d->tileCache.clear(); @@ -362,7 +368,7 @@ viewport()->setUpdatesEnabled(true); viewport()->update(); if (d->showHistogram) - updateHistogram(true); + updateHistogram(true); emit signalChanged(false, false); emit signalZoomChanged(d->zoom); @@ -453,11 +459,12 @@ */ bool Canvas::updateHistogram(bool invalidate) { - if (invalidate && d->imageHistogram) { - delete d->imageHistogram; - d->imageHistogram = 0; + if (invalidate && d->imageHistogram) + { + delete d->imageHistogram; + d->imageHistogram = 0; } - + if (d->imageHistogram == 0) { d->histogramReady = false; d->imageHistogram = new ImageHistogram(d->im->getData(), @@ -710,9 +717,9 @@ void Canvas::paintHistogram(const QRect& cr) { if (!d->showHistogram) - return; + return; if (!d->histogramPixmap) - return; + return; QRect rcexposed, rc, rctmp; Patch apply on digiKam 0.8.0. Tom, can you apply this patch on future digiKam 0.7.4 tarball ? Thanks in advance. Gilles Caulier |