Bug 214340

Summary: crash occured when removing tags
Product: [Applications] digikam Reporter: Adam Petty <adam>
Component: Tags-EngineAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED FIXED    
Severity: crash CC: ajlcary, marcel.wiesweg, michael.hagmann, terri.bugs
Priority: NOR    
Version: 1.0.0   
Target Milestone: ---   
Platform: Unlisted Binaries   
OS: Linux   
Latest Commit: Version Fixed In: 1.3.0
Sentry Crash Report:

Description Adam Petty 2009-11-13 02:51:38 UTC
Application that crashed: digikam
Version of the application: 1.0.0-beta6
KDE Version: 4.3.2 (KDE 4.3.2)
Qt Version: 4.5.2
Operating System: Linux 2.6.31-14-generic x86_64
Distribution: Ubuntu 9.10

What I was doing when the application crashed:
when using tabs on the left hand side of the application I removed a duplicate tag and hte system crashed

 -- Backtrace:
Application: digiKam (digikam), signal: Segmentation fault
[Current thread is 1 (Thread 0x7f583866e750 (LWP 2217))]

Thread 16 (Thread 0x7f5823d16910 (LWP 2218)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f58339384fb in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00000000006cfc73 in Digikam::ScanController::run (this=0x1718f10) at /home/adam/Downloads/digikam-1.0.0-beta6/digikam/scancontroller.cpp:499
#3  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#5  0x00007f5831d887bd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 15 (Thread 0x7f58201ac910 (LWP 2220)):
#0  0x00007f5831d7c373 in poll () from /lib/libc.so.6
#1  0x00007f582d37e36c in ?? () from /lib/libglib-2.0.so.0
#2  0x00007f582d37e6b0 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#3  0x00007f5833a461fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007f5833a1c532 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007f5833a1c904 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007f58339346cb in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#9  0x00007f5831d887bd in clone () from /lib/libc.so.6
#10 0x0000000000000000 in ?? ()

Thread 14 (Thread 0x7f581f91f910 (LWP 2221)):
#0  0x00007f5831d7c373 in poll () from /lib/libc.so.6
#1  0x00007f582d37e36c in ?? () from /lib/libglib-2.0.so.0
#2  0x00007f582d37e6b0 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#3  0x00007f5833a461fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007f5833a1c532 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007f5833a1c904 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007f58339346cb in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#9  0x00007f5831d887bd in clone () from /lib/libc.so.6
#10 0x0000000000000000 in ?? ()

Thread 13 (Thread 0x7f581f09e910 (LWP 2222)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f58339384fb in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007f5835927212 in Digikam::LoadSaveThread::run (this=0x17c1a90) at /home/adam/Downloads/digikam-1.0.0-beta6/libs/threadimageio/loadsavethread.cpp:132
#3  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#5  0x00007f5831d887bd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 12 (Thread 0x7f581e89d910 (LWP 2223)):
#0  0x00007f5831d7c373 in poll () from /lib/libc.so.6
#1  0x00007f582d37e36c in ?? () from /lib/libglib-2.0.so.0
#2  0x00007f582d37e6b0 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#3  0x00007f5833a461fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007f5833a1c532 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007f5833a1c904 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007f58339346cb in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#9  0x00007f5831d887bd in clone () from /lib/libc.so.6
#10 0x0000000000000000 in ?? ()

Thread 11 (Thread 0x7f581e09c910 (LWP 2224)):
#0  0x00007f582d37d908 in g_main_context_check () from /lib/libglib-2.0.so.0
#1  0x00007f582d37e280 in ?? () from /lib/libglib-2.0.so.0
#2  0x00007f582d37e6b0 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#3  0x00007f5833a461fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007f5833a1c532 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007f5833a1c904 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007f58339346cb in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#9  0x00007f5831d887bd in clone () from /lib/libc.so.6
#10 0x0000000000000000 in ?? ()

Thread 10 (Thread 0x7f581d89b910 (LWP 2225)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f58339384fb in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007f5835927212 in Digikam::LoadSaveThread::run (this=0x1aa1670) at /home/adam/Downloads/digikam-1.0.0-beta6/libs/threadimageio/loadsavethread.cpp:132
#3  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#5  0x00007f5831d887bd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 9 (Thread 0x7f5815350910 (LWP 2226)):
#0  0x00007f5830b2682d in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f581c20ec91 in ?? () from /usr/lib/libxine.so.1
#2  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#3  0x00007f5831d887bd in clone () from /lib/libc.so.6
#4  0x0000000000000000 in ?? ()

Thread 8 (Thread 0x7f5812df2910 (LWP 2227)):
#0  0x00007f5831d813c2 in select () from /lib/libc.so.6
#1  0x00007f581c237725 in xine_usec_sleep () from /usr/lib/libxine.so.1
#2  0x00007f581c21c7e9 in ?? () from /usr/lib/libxine.so.1
#3  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#4  0x00007f5831d887bd in clone () from /lib/libc.so.6
#5  0x0000000000000000 in ?? ()

Thread 7 (Thread 0x7f58125f1910 (LWP 2228)):
#0  0x00007f5830b240b2 in pthread_mutex_lock () from /lib/libpthread.so.0
#1  0x00007f582d379625 in g_main_context_query () from /lib/libglib-2.0.so.0
#2  0x00007f582d37e241 in ?? () from /lib/libglib-2.0.so.0
#3  0x00007f582d37e6b0 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#4  0x00007f5833a461fe in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007f5833a1c532 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007f5833a1c904 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#7  0x00007f58339346cb in QThread::exec() () from /usr/lib/libQtCore.so.4
#8  0x00007f581c46956e in ?? () from /usr/lib/qt4/plugins/phonon_backend/phonon_xine.so
#9  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#10 0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#11 0x00007f5831d887bd in clone () from /lib/libc.so.6
#12 0x0000000000000000 in ?? ()

Thread 6 (Thread 0x7f580d9de910 (LWP 2236)):
#0  0x00007f5831d7c373 in poll () from /lib/libc.so.6
#1  0x00007f5811beccbe in ?? () from /usr/lib/xine/plugins/1.26/xineplug_ao_out_alsa.so
#2  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#3  0x00007f5831d887bd in clone () from /lib/libc.so.6
#4  0x0000000000000000 in ?? ()

Thread 5 (Thread 0x7f58117d9910 (LWP 2237)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f581c21f983 in ?? () from /usr/lib/libxine.so.1
#2  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#3  0x00007f5831d887bd in clone () from /lib/libc.so.6
#4  0x0000000000000000 in ?? ()

Thread 4 (Thread 0x7f5810fd8910 (LWP 2238)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f58339384fb in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007f5835927212 in Digikam::LoadSaveThread::run (this=0x23c14d0) at /home/adam/Downloads/digikam-1.0.0-beta6/libs/threadimageio/loadsavethread.cpp:132
#3  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#5  0x00007f5831d887bd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 3 (Thread 0x7f580f764910 (LWP 2505)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f58339384fb in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007f5835927212 in Digikam::LoadSaveThread::run (this=0x2a59a50) at /home/adam/Downloads/digikam-1.0.0-beta6/libs/threadimageio/loadsavethread.cpp:132
#3  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#5  0x00007f5831d887bd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 2 (Thread 0x7f580333e910 (LWP 2506)):
#0  0x00007f5830b265a9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f58339384fb in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007f5835927212 in Digikam::LoadSaveThread::run (this=0x33aff50) at /home/adam/Downloads/digikam-1.0.0-beta6/libs/threadimageio/loadsavethread.cpp:132
#3  0x00007f5833937445 in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007f5830b21a04 in start_thread () from /lib/libpthread.so.0
#5  0x00007f5831d887bd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f583866e750 (LWP 2217)):
[KCrash Handler]
#5  0x00007f5831d2b61b in memcpy () from /lib/libc.so.6
#6  0x00007f583397af15 in QString::append(QString const&) () from /usr/lib/libQtCore.so.4
#7  0x0000000000604a07 in QString::operator+= (this=0x329caa0, leadingSlash=<value optimized out>) at /usr/include/qt4/QtCore/qstring.h:269
#8  Digikam::TAlbum::tagPath (this=0x329caa0, leadingSlash=<value optimized out>) at /home/adam/Downloads/digikam-1.0.0-beta6/digikam/album.cpp:406
#9  0x00000000006c1fa1 in Digikam::MetadataHub::write (this=0x7fff0869c0d0, metadata=<value optimized out>, writeMode=<value optimized out>, settings=<value optimized out>)
    at /home/adam/Downloads/digikam-1.0.0-beta6/digikam/metadatahub.cpp:620
#10 0x00000000006c2939 in Digikam::MetadataHub::write (this=0x7fff0869c0d0, filePath=..., writeMode=Digikam::MetadataHub::FullWrite, settings=...)
    at /home/adam/Downloads/digikam-1.0.0-beta6/digikam/metadatahub.cpp:656
#11 0x0000000000495898 in Digikam::ImageDescEditTab::slotApplyAllChanges (this=0x2274120) at /home/adam/Downloads/digikam-1.0.0-beta6/libs/imageproperties/imagedescedittab.cpp:598
#12 0x0000000000496a4c in Digikam::ImageDescEditTab::qt_metacall (this=0x2274120, _c=QMetaObject::InvokeMetaMethod, _id=146472576, _a=0x7fff0869c280)
    at /home/adam/Downloads/digikam-1.0.0-beta6/digikam/imagedescedittab.moc:140
#13 0x00007f5833a32ddc in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQtCore.so.4
#14 0x00007f5832f658e7 in QAbstractButton::clicked(bool) () from /usr/lib/libQtGui.so.4
#15 0x00007f5832cc741b in ?? () from /usr/lib/libQtGui.so.4
#16 0x00007f5832cc902b in ?? () from /usr/lib/libQtGui.so.4
#17 0x00007f5832cc9275 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/libQtGui.so.4
#18 0x00007f58329b29c0 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4
#19 0x00007f5832963efc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#20 0x00007f583296b011 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#21 0x00007f5834889ab6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5
#22 0x00007f5833a1dc2c in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
#23 0x00007f583296a8e0 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&) () from /usr/lib/libQtGui.so.4
#24 0x00007f58329d0a0e in ?? () from /usr/lib/libQtGui.so.4
#25 0x00007f58329cfaa9 in QApplication::x11ProcessEvent(_XEvent*) () from /usr/lib/libQtGui.so.4
#26 0x00007f58329f8d0c in ?? () from /usr/lib/libQtGui.so.4
#27 0x00007f582d37abbe in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#28 0x00007f582d37e588 in ?? () from /lib/libglib-2.0.so.0
#29 0x00007f582d37e6b0 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#30 0x00007f5833a461a6 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#31 0x00007f58329f84be in ?? () from /usr/lib/libQtGui.so.4
#32 0x00007f5833a1c532 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#33 0x00007f5833a1c904 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#34 0x00007f5833a1eab9 in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#35 0x0000000000768952 in main (argc=<value optimized out>, argv=<value optimized out>) at /home/adam/Downloads/digikam-1.0.0-beta6/digikam/main.cpp:195

Reported using DrKonqi
Comment 1 Marcel Wiesweg 2009-11-13 13:32:13 UTC
SVN commit 1048481 by mwiesweg:

Ensure removed tags are not kept in map and later accessed when keeping a MetadataHub

CCBUG: 214340

 M  +10 -0     digikam/metadatahub.cpp  
 M  +8 -0      digikam/metadatahub.h  
 M  +2 -1      libs/imageproperties/imagedescedittab.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1048481
Comment 2 Marcel Wiesweg 2009-11-13 13:34:44 UTC
Could you reproduce the problem? If yes, please try as soon rc1 is out if this bug is fixed for you.
Comment 3 Adam Petty 2009-11-13 17:04:31 UTC
I dont know if I can reproduce it. 




________________________________
From: Marcel Wiesweg <marcel.wiesweg@gmx.de>
To: adam@akpetty.com
Sent: Fri, November 13, 2009 7:34:46 AM
Subject: [Bug 214340] crash occured when removing tags

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


Marcel Wiesweg <marcel.wiesweg@gmx.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |marcel.wiesweg@gmx.de




--- Comment #2 from Marcel Wiesweg <marcel wiesweg gmx de>  2009-11-13 13:34:44 ---
Could you reproduce the problem? If yes, please try as soon rc1 is out if this
bug is fixed for you.
Comment 4 caulier.gilles 2009-12-25 20:09:57 UTC
digiKam 1.0.0 is out since few days...

http://www.digikam.org/drupal/node/491

Please try with this version coming with more than 400 bug-fixes.

Thanks in advance

Gilles Caulier
Comment 5 Johannes Wienke 2010-01-08 20:39:36 UTC
I'd assume this is fixed?
Comment 6 Marcel Wiesweg 2010-01-21 17:43:46 UTC
*** Bug 223219 has been marked as a duplicate of this bug. ***
Comment 7 Marcel Wiesweg 2010-01-21 17:51:54 UTC
With the new report for 1.0.0, it seems this bug is not fixed. I have no idea why.

A metadatahub keeps a map of TAlbum pointers.
For a good long-term solution, we need to get away from TAlbums*, they cannot be accessed from a different thread and cause these problems here. We probably need an additional cache of the tags tree, at a low level (AlbumDB, DatabaseAccess), and fully mutex protected. It needs to provide tag id -> tag path, tag path -> tag id, tag name -> all tag ids with that name.
Comment 8 caulier.gilles 2010-01-25 21:50:02 UTC
digiKam 1.1. release will be done in few days. Please check if this entry still valid.

Thanks in advance

Gilles Caulier
Comment 9 Marcel Wiesweg 2010-02-11 20:31:15 UTC
*** Bug 226157 has been marked as a duplicate of this bug. ***
Comment 10 Marcel Wiesweg 2010-02-17 16:30:14 UTC
*** Bug 227091 has been marked as a duplicate of this bug. ***
Comment 11 Marcel Wiesweg 2010-02-17 18:00:06 UTC
SVN commit 1091832 by mwiesweg:

For the time being (until there is a thread-safe tag cache at a low level)
we must look after the MetadataHub and notify it when tags are removed.
This code was already added for 1.0, got lost during the model/view merge, but
we got crash reports for 1.0-beta5, 1.0.0, 1.1.0, and 1.2.0-svn.
So I cannot be sure that this fully fixes 214340.

CCBUG: 226504
CCBUG: 214340

 M  +17 -0     imagedescedittab.cpp  
 M  +2 -0      imagedescedittab.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1091832
Comment 12 caulier.gilles 2010-04-04 10:44:26 UTC
digiKam and Kipi-plugins 1.2.0 are out. Please check if crash is still valid there.

Thanks in advance

Gilles Caulier
Comment 13 Marcel Wiesweg 2010-04-12 18:22:39 UTC
In current SVN, the ImgDescEditTab has been ported to use the new TagsCache. No storing of TAlbum pointers anymore, this crash must be fixed.