Summary: | Reproducable Crash in Albumview | ||
---|---|---|---|
Product: | [Applications] digikam | Reporter: | Ian Hubbertz <kde_bugs> |
Component: | Thumbs-BarView | Assignee: | Digikam Developers <digikam-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | caulier.gilles, frederic.coiffier, marcel.wiesweg, sgh |
Priority: | NOR | ||
Version: | 0.10.0 | ||
Target Milestone: | --- | ||
Platform: | Gentoo Packages | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 0.10.0 | |
Sentry Crash Report: | |||
Attachments: | Patch |
Description
Ian Hubbertz
2009-02-16 00:22:44 UTC
Since update to 0.10.0-rc2 (from rc1) digikam crashes in Albumview very often. (Usually after less than 1 minute runtime). There is no suitable debug symbols. please recompile digiKam with full-debug option. Note : crash is not reproducible here. Gilles Caulier It was compiled from gentoo's portage. I will try to compile with debug symbols this evening. However, I already had a look at the registers yesterday and %rdi was 0. %rdi is the first argument - other said, the this-pointer, so the ThumbBarItem object is NULL. As Gilles already said, it would be great to have the debug info for line #6, which must be the problem here. What do you do when this crash occurs? Judging from your comment it seems just scrolling is enough? Anwendung: digiKam (digikam), Signal SIGSEGV 0x00007f9f8c24cdc1 in nanosleep () from /lib/libc.so.6 [Current thread is 0 (LWP 4832)] Thread 13 (Thread 0x7f9f82507950 (LWP 4833)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00000000005d3b40 in Digikam::ScanController::run (this=0xa7c620) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/digikam/scancontroller.cpp:412 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 12 (Thread 0x7f9f7e874950 (LWP 4835)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f9f905d1847 in Digikam::LoadSaveThread::run (this=0xc58c90) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/threadimageio/loadsavethread.cpp:131 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 11 (Thread 0x7f9f7e073950 (LWP 4836)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f9f905d1847 in Digikam::LoadSaveThread::run (this=0xce3290) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/threadimageio/loadsavethread.cpp:131 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 10 (Thread 0x7f9f775a8950 (LWP 4837)): #0 0x00007f9f8ccb203d in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f7b9e4fe1 in ?? () from /usr/lib64/libxine.so.1 #2 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #3 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #4 0x0000000000000000 in ?? () Thread 9 (Thread 0x7f9f75b31950 (LWP 4838)): #0 0x00007f9f8c276a92 in select () from /lib/libc.so.6 #1 0x00007f9f7ba0a1a4 in xine_usec_sleep () from /usr/lib64/libxine.so.1 #2 0x00007f9f7b9f1425 in ?? () from /usr/lib64/libxine.so.1 #3 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #4 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #5 0x0000000000000000 in ?? () Thread 8 (Thread 0x7f9f75330950 (LWP 4839)): #0 0x00007f9f8c2749f6 in poll () from /lib/libc.so.6 #1 0x00007f9f898ca538 in ?? () from /usr/lib/libglib-2.0.so.0 #2 0x00007f9f898ca85b in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #3 0x00007f9f8d015a26 in QEventDispatcherGlib::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8cfef522 in QEventLoop::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #5 0x00007f9f8cfef6b5 in QEventLoop::exec () from /usr/lib64/qt4/libQtCore.so.4 #6 0x00007f9f8cf1bc0c in QThread::exec () from /usr/lib64/qt4/libQtCore.so.4 #7 0x00007f9f7bc3be52 in ?? () from /usr/lib64/kde4/plugins/phonon_backend/phonon_xine.so #8 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #9 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #10 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #11 0x0000000000000000 in ?? () Thread 7 (Thread 0x7f9f74925950 (LWP 4842)): #0 0x00007f9f8c2749f6 in poll () from /lib/libc.so.6 #1 0x00007f9f7492aa78 in ?? () from /usr/lib64/xine/plugins/1.25/xineplug_ao_out_alsa.so #2 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #3 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #4 0x0000000000000000 in ?? () Thread 6 (Thread 0x7f9f74124950 (LWP 4843)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f7b9f2b70 in ?? () from /usr/lib64/libxine.so.1 #2 0x00007f9f7b9f44ac in ?? () from /usr/lib64/libxine.so.1 #3 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #4 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #5 0x0000000000000000 in ?? () Thread 5 (Thread 0x7f9f6f9ea950 (LWP 4858)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f9f905d1847 in Digikam::LoadSaveThread::run (this=0x2494330) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/threadimageio/loadsavethread.cpp:131 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 4 (Thread 0x7f9f70a46950 (LWP 4865)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f9f905d1847 in Digikam::LoadSaveThread::run (this=0x4ca9530) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/threadimageio/loadsavethread.cpp:131 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 3 (Thread 0x7f9f72298950 (LWP 5192)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f9f905d1847 in Digikam::LoadSaveThread::run (this=0x5250370) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/threadimageio/loadsavethread.cpp:131 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 2 (Thread 0x7f9f72af0950 (LWP 5193)): #0 0x00007f9f8ccb1db9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f9f8cf1f459 in QWaitCondition::wait () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f9f905d1847 in Digikam::LoadSaveThread::run (this=0x4777df0) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/threadimageio/loadsavethread.cpp:131 #3 0x00007f9f8cf1e719 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #4 0x00007f9f8ccae007 in start_thread () from /lib/libpthread.so.0 #5 0x00007f9f8c27d38d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 1 (Thread 0x7f9f931c3750 (LWP 4832)): [KCrash Handler] #5 Digikam::ThumbBarItem::repaint (this=0x0) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/libs/widgets/common/thumbbar.cpp:1179 #6 0x00000000005c1062 in Digikam::ImagePreviewBar::eventFilter (this=0xdf2a70, obj=0xe20f60, ev=0x7fff9b215a90) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/digikam/imagepreviewbar.cpp:695 #7 0x00007f9f8cfefe87 in QCoreApplicationPrivate::sendThroughObjectEventFilters () from /usr/lib64/qt4/libQtCore.so.4 #8 0x00007f9f8db1cd8c in QApplicationPrivate::notify_helper () from /usr/lib64/qt4/libQtGui.so.4 #9 0x00007f9f8db2469a in QApplication::notify () from /usr/lib64/qt4/libQtGui.so.4 #10 0x00007f9f8edf6c3b in KApplication::notify () from /usr/kde/4.2/lib64/libkdeui.so.5 #11 0x00007f9f8cff0b23 in QCoreApplication::notifyInternal () from /usr/lib64/qt4/libQtCore.so.4 #12 0x00007f9f8db25a70 in QApplicationPrivate::dispatchEnterLeave () from /usr/lib64/qt4/libQtGui.so.4 #13 0x00007f9f8db264f5 in QApplicationPrivate::sendMouseEvent () from /usr/lib64/qt4/libQtGui.so.4 #14 0x00007f9f8db7f24c in ?? () from /usr/lib64/qt4/libQtGui.so.4 #15 0x00007f9f8db7e11d in QApplication::x11ProcessEvent () from /usr/lib64/qt4/libQtGui.so.4 #16 0x00007f9f8dba25b4 in ?? () from /usr/lib64/qt4/libQtGui.so.4 #17 0x00007f9f898c6fc1 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #18 0x00007f9f898ca69d in ?? () from /usr/lib/libglib-2.0.so.0 #19 0x00007f9f898ca85b in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #20 0x00007f9f8d015a0f in QEventDispatcherGlib::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #21 0x00007f9f8dba1e7f in ?? () from /usr/lib64/qt4/libQtGui.so.4 #22 0x00007f9f8cfef522 in QEventLoop::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #23 0x00007f9f8cfef6b5 in QEventLoop::exec () from /usr/lib64/qt4/libQtCore.so.4 #24 0x00007f9f8cff16b4 in QCoreApplication::exec () from /usr/lib64/qt4/libQtCore.so.4 #25 0x00000000005ee4ac in main (argc=5, argv=0x7fff9b217298) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/digikam/main.cpp:190 I found the problem: 689 if (d->ratingItem) 690 { 691 unsetCursor(); 692 d->ratingBox->hide(); 693 ThumbBarItem *item = d->ratingItem; 694 d->ratingItem = 0; 695 item->repaint(); 696 } Problem is that line 692 results in the same event, so the function is reentered with the *SAME* ImagePreviewBar object, so in the first called method, d->ratingItem has been set to NULL, when d->ratingBox->hide() returns. -------> Look at #0 and #12 <------- #0 Digikam::ImagePreviewBar::eventFilter (this=0xe224a0, obj=0xbc5d40, ev=0x7fff0cc90730) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/digikam/imagepreviewbar.cpp:694 #1 0x00007facfea6ce87 in QCoreApplicationPrivate::sendThroughObjectEventFilters () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007facff599d8c in QApplicationPrivate::notify_helper () from /usr/lib64/qt4/libQtGui.so.4 #3 0x00007facff5a169a in QApplication::notify () from /usr/lib64/qt4/libQtGui.so.4 #4 0x00007fad00873c3b in KApplication::notify () from /usr/kde/4.2/lib64/libkdeui.so.5 #5 0x00007facfea6db23 in QCoreApplication::notifyInternal () from /usr/lib64/qt4/libQtCore.so.4 #6 0x00007facff5a2a70 in QApplicationPrivate::dispatchEnterLeave () from /usr/lib64/qt4/libQtGui.so.4 #7 0x00007facff5a34f5 in QApplicationPrivate::sendMouseEvent () from /usr/lib64/qt4/libQtGui.so.4 #8 0x00007facff5a37d7 in QApplicationPrivate::sendSyntheticEnterLeave () from /usr/lib64/qt4/libQtGui.so.4 #9 0x00007facff5e162c in QWidgetPrivate::hideChildren () from /usr/lib64/qt4/libQtGui.so.4 #10 0x00007facff5e1715 in QWidgetPrivate::hide_helper () from /usr/lib64/qt4/libQtGui.so.4 #11 0x00007facff5e8038 in QWidget::setVisible () from /usr/lib64/qt4/libQtGui.so.4 #12 0x00000000005c104d in Digikam::ImagePreviewBar::eventFilter (this=0xe224a0, obj=0xbc5d40, ev=0x7fff0cc91000) at /mnt/var_data/var/tmp/portage/media-gfx/digikam-0.10.0_rc2/work/digikam-0.10.0-rc2/digikam/imagepreviewbar.cpp:692 #13 0x00007facfea6ce87 in QCoreApplicationPrivate::sendThroughObjectEventFilters () from /usr/lib64/qt4/libQtCore.so.4 #14 0x00007facff599d8c in QApplicationPrivate::notify_helper () from /usr/lib64/qt4/libQtGui.so.4 #15 0x00007facff5a169a in QApplication::notify () from /usr/lib64/qt4/libQtGui.so.4 #16 0x00007fad00873c3b in KApplication::notify () from /usr/kde/4.2/lib64/libkdeui.so.5 #17 0x00007facfea6db23 in QCoreApplication::notifyInternal () from /usr/lib64/qt4/libQtCore.so.4 #18 0x00007facff5a2a70 in QApplicationPrivate::dispatchEnterLeave () from /usr/lib64/qt4/libQtGui.so.4 #19 0x00007facff5a34f5 in QApplicationPrivate::sendMouseEvent () from /usr/lib64/qt4/libQtGui.so.4 #20 0x00007facff5fc24c in ?? () from /usr/lib64/qt4/libQtGui.so.4 #21 0x00007facff5fb11d in QApplication::x11ProcessEvent () from /usr/lib64/qt4/libQtGui.so.4 #22 0x00007facff61f5b4 in ?? () from /usr/lib64/qt4/libQtGui.so.4 #23 0x00007facfb343fc1 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #24 0x00007facfb34769d in ?? () from /usr/lib/libglib-2.0.so.0 #25 0x00007facfb34785b in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #26 0x00007facfea92a0f in QEventDispatcherGlib::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #27 0x00007facff61ee7f in ?? () from /usr/lib64/qt4/libQtGui.so.4 #28 0x00007facfea6c522 in QEventLoop::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #29 0x00007facfea6c6b5 in QEventLoop::exec () from /usr/lib64/qt4/libQtCore.so.4 #30 0x00007facfea6e6b4 in QCoreApplication::exec () from /usr/lib64/qt4/libQtCore.so.4 #31 0x00000000005ee4ac in main (argc=1, argv=0x7fff0cc92808) Created attachment 31381 [details]
Patch
This patch seems to work fine for me.
It just copies first to the stack (local var item) and then checks "item" to be valid.
This only fixes the NULL-pointer access, but not the fact that the method is called twice. I haven't had a deep look into the code, so I'm unsure if this is wished behavior or a problem.
SVN commit 927266 by mwiesweg: Backport to 0.10: Apply patch from Ian Hubbertz. Calling ratingBox->hide can recurse into event filter again, setting ratingItem to 0, causing a crash when returned to the outer method. Store ratingItem on the stack. CCBUG: 184473 M +5 -4 imagepreviewbar.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=927266 Ian, thank you very much for your work on this problem. I have applied your patch (with some minor additions) to trunk. It's no problem to reenter this method. I have moved d->ratingItem = 0 in front of d->ratingBox->hide() so that the second method call will do nothing. Don't know if you want to re-test this, or just close the bug. I will commit the change to 0.11 branch to SVN later (already committed to local git) because I have a few local changes to sort out before. SVN commit 928027 by mwiesweg: Apply patch from Ian Hubbertz. Calling ratingBox->hide can recurse into event filter again, setting ratingItem to 0, causing a crash when returned to the outer method. Store ratingItem on the stack. CCBUG: 184473 M +5 -4 imagepreviewbar.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=928027 Ian, Marcel has fixed several issue in current implementation. please can you checkout svn and try again ? Thanks in advance Gilles Caulier *** Bug 185207 has been marked as a duplicate of this bug. *** *** Bug 185369 has been marked as a duplicate of this bug. *** I've tested the last SVN version (930561) and I can't reproduce the problem. So, it seems to be solved. Thank you for your work. Thanks for the report Fred. I close this file now. Gilles Caulier |