Bug 283066

Summary: Kontact crashes when switching to Zanshin
Product: [Applications] kontact Reporter: Georg Greve <greve>
Component: generalAssignee: kdepim bugs <kdepim-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: ervin
Priority: NOR    
Version: 4.7.1   
Target Milestone: ---   
Platform: Fedora RPMs   
OS: Linux   
Latest Commit: Version Fixed In:

Description Georg Greve 2011-09-30 07:11:41 UTC
Application: kontact (4.7.1)
KDE Platform Version: 4.7.1 (4.7.1)
Qt Version: 4.8.0
Operating System: Linux 2.6.40.4-5.fc15.x86_64 x86_64
Distribution: "Fedora release 15 (Lovelock)"

-- Information about the crash:
- What I was doing when the application crashed:

	* Switch to Zanshin
	* Let it go through the folders to see what's there
	* Before it's done: Crash.

Interestingly, this does not happen when starting Zanshin standalone.

HTH.

The crash can be reproduced every time.

-- Backtrace:
Application: Kontact (kontact), signal: Segmentation fault
82	T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
[Current thread is 1 (Thread 0x7f52346f9860 (LWP 29140))]

Thread 3 (Thread 0x7f5229abf700 (LWP 29141)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:165
#1  0x000000379e18f3cc in ?? () from /usr/lib64/libQtWebKit.so.4
#2  0x000000379e18f4f9 in ?? () from /usr/lib64/libQtWebKit.so.4
#3  0x000000386ba07b31 in start_thread (arg=0x7f5229abf700) at pthread_create.c:305
#4  0x000000386b2dfd2d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115

Thread 2 (Thread 0x7f52291be700 (LWP 29142)):
#0  0x000000386d641304 in g_main_context_acquire (context=0x7f52240009a0) at gmain.c:2542
#1  0x000000386d642b41 in g_main_context_iterate (context=0x7f52240009a0, block=1, dispatch=1, self=<optimized out>) at gmain.c:3036
#2  0x000000386d64325c in g_main_context_iteration (context=0x7f52240009a0, may_block=1) at gmain.c:3155
#3  0x000000378d9a5016 in QEventDispatcherGlib::processEvents (this=0x7f52240008c0, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:426
#4  0x000000378d9752a2 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149
#5  0x000000378d9754f7 in QEventLoop::exec (this=0x7f52291bdd20, flags=...) at kernel/qeventloop.cpp:204
#6  0x000000378d876eb7 in QThread::exec (this=<optimized out>) at thread/qthread.cpp:501
#7  0x000000378d879e9b in QThreadPrivate::start (arg=0x1003a10) at thread/qthread_unix.cpp:298
#8  0x000000386ba07b31 in start_thread (arg=0x7f52291be700) at pthread_create.c:305
#9  0x000000386b2dfd2d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115

Thread 1 (Thread 0x7f52346f9860 (LWP 29140)):
[KCrash Handler]
#6  ref (this=0x2231313500000019) at ../../src/corelib/arch/qatomic_x86_64.h:121
#7  QPersistentModelIndex::operator= (this=0x3fbf830, other=...) at kernel/qabstractitemmodel.cpp:213
#8  0x0000003791c17383 in qCopy<QPersistentModelIndex*, QPersistentModelIndex*> (dest=0x3fbf838, end=0x3fbf830, begin=0x3fbf840) at /usr/include/QtCore/qalgorithms.h:82
#9  QVector<QPersistentModelIndex>::erase (this=0x3f5b118, abegin=<optimized out>, aend=<optimized out>) at /usr/include/QtCore/qvector.h:634
#10 0x0000003791c142f2 in erase (pos=0x3fbf830, this=0x3f5b118) at /usr/include/QtCore/qvector.h:256
#11 KDescendantsProxyModelPrivate::processPendingParents (this=0x3f5b110) at /usr/src/debug/kdelibs-4.7.1/kdeui/itemviews/kdescendantsproxymodel.cpp:162
#12 0x0000003791c14c9e in scheduleProcessPendingParents (this=0x3f5b110) at /usr/src/debug/kdelibs-4.7.1/kdeui/itemviews/kdescendantsproxymodel.cpp:119
#13 KDescendantsProxyModelPrivate::sourceRowsInserted (this=0x3f5b110, parent=..., start=0, end=0) at /usr/src/debug/kdelibs-4.7.1/kdeui/itemviews/kdescendantsproxymodel.cpp:595
#14 0x000000378d989f51 in QMetaObject::activate (sender=0x3d21900, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1d1a0) at kernel/qobject.cpp:3546
#15 0x000000378d9d5cc4 in QAbstractItemModel::rowsInserted (this=<optimized out>, _t1=<optimized out>, _t2=0, _t3=0) at .moc/release-shared/moc_qabstractitemmodel.cpp:197
#16 0x000000378d9703cd in QAbstractItemModel::endInsertRows (this=0x3d21900) at kernel/qabstractitemmodel.cpp:2433
#17 0x0000003790d6374f in QSortFilterProxyModelPrivate::insert_source_items (this=0x3f5b670, source_to_proxy=..., proxy_to_source=..., source_items=<optimized out>, source_parent=<optimized out>, orient=Qt::Vertical, emit_signal=true) at itemviews/qsortfilterproxymodel.cpp:695
#18 0x0000003790d678d7 in QSortFilterProxyModelPrivate::source_items_inserted (this=0x3f5b670, source_parent=..., start=<optimized out>, end=<optimized out>, orient=Qt::Vertical) at itemviews/qsortfilterproxymodel.cpp:806
#19 0x0000003790d67bff in QSortFilterProxyModelPrivate::_q_sourceRowsInserted (this=0x3f5b670, source_parent=<optimized out>, start=<optimized out>, end=<optimized out>) at itemviews/qsortfilterproxymodel.cpp:1280
#20 0x000000378d989f51 in QMetaObject::activate (sender=0x3d1a110, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1d500) at kernel/qobject.cpp:3546
#21 0x000000378d9d5cc4 in QAbstractItemModel::rowsInserted (this=<optimized out>, _t1=<optimized out>, _t2=0, _t3=0) at .moc/release-shared/moc_qabstractitemmodel.cpp:197
#22 0x000000378d9703cd in QAbstractItemModel::endInsertRows (this=0x3d1a110) at kernel/qabstractitemmodel.cpp:2433
#23 0x0000003790d6374f in QSortFilterProxyModelPrivate::insert_source_items (this=0x3f5ad20, source_to_proxy=..., proxy_to_source=..., source_items=<optimized out>, source_parent=<optimized out>, orient=Qt::Vertical, emit_signal=true) at itemviews/qsortfilterproxymodel.cpp:695
#24 0x0000003790d678d7 in QSortFilterProxyModelPrivate::source_items_inserted (this=0x3f5ad20, source_parent=..., start=<optimized out>, end=<optimized out>, orient=Qt::Vertical) at itemviews/qsortfilterproxymodel.cpp:806
#25 0x0000003790d67bff in QSortFilterProxyModelPrivate::_q_sourceRowsInserted (this=0x3f5ad20, source_parent=<optimized out>, start=<optimized out>, end=<optimized out>) at itemviews/qsortfilterproxymodel.cpp:1280
#26 0x000000378d989f51 in QMetaObject::activate (sender=0x3f4cb80, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1d860) at kernel/qobject.cpp:3546
#27 0x000000378d9d5cc4 in QAbstractItemModel::rowsInserted (this=<optimized out>, _t1=<optimized out>, _t2=0, _t3=0) at .moc/release-shared/moc_qabstractitemmodel.cpp:197
#28 0x000000378d9703cd in QAbstractItemModel::endInsertRows (this=0x3f4cb80) at kernel/qabstractitemmodel.cpp:2433
#29 0x0000003790d6374f in QSortFilterProxyModelPrivate::insert_source_items (this=0x3f4cd00, source_to_proxy=..., proxy_to_source=..., source_items=<optimized out>, source_parent=<optimized out>, orient=Qt::Vertical, emit_signal=true) at itemviews/qsortfilterproxymodel.cpp:695
#30 0x0000003790d678d7 in QSortFilterProxyModelPrivate::source_items_inserted (this=0x3f4cd00, source_parent=..., start=<optimized out>, end=<optimized out>, orient=Qt::Vertical) at itemviews/qsortfilterproxymodel.cpp:806
#31 0x0000003790d67bff in QSortFilterProxyModelPrivate::_q_sourceRowsInserted (this=0x3f4cd00, source_parent=<optimized out>, start=<optimized out>, end=<optimized out>) at itemviews/qsortfilterproxymodel.cpp:1280
#32 0x000000378d97df38 in QMetaMethod::invoke (this=0x7fffedb1dd40, object=0x3f4cb80, connectionType=Qt::DirectConnection, returnValue=..., val0=..., val1=..., val2=..., val3=..., val4=..., val5=..., val6=..., val7=..., val8=..., val9=...) at kernel/qmetaobject.cpp:1636
#33 0x000000378d9802f0 in QMetaObject::invokeMethod (obj=0x3f4cb80, member=<optimized out>, type=Qt::DirectConnection, ret=..., val0=..., val1=..., val2=..., val3=..., val4=..., val5=..., val6=..., val7=..., val8=..., val9=...) at kernel/qmetaobject.cpp:1178
#34 0x0000003791c10bde in invokeMethod (val9=..., val8=..., val7=..., val6=..., val5=..., val4=..., val3=..., val2=..., val1=..., val0=..., type=Qt::DirectConnection, member=0x3791dc0708 "_q_sourceRowsInserted", obj=0x3f4cb80) at /usr/include/QtCore/qobjectdefs.h:418
#35 invokeRowsInserted (end=0, start=0, source_parent=..., this=0x3a7aef0) at /usr/src/debug/kdelibs-4.7.1/kdeui/itemviews/krecursivefilterproxymodel.cpp:66
#36 KRecursiveFilterProxyModelPrivate::sourceRowsInserted (this=0x3a7aef0, source_parent=..., start=<optimized out>, end=0) at /usr/src/debug/kdelibs-4.7.1/kdeui/itemviews/krecursivefilterproxymodel.cpp:190
#37 0x000000378d989f51 in QMetaObject::activate (sender=0x3233740, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1e270) at kernel/qobject.cpp:3546
#38 0x000000378d9d5cc4 in QAbstractItemModel::rowsInserted (this=<optimized out>, _t1=<optimized out>, _t2=0, _t3=0) at .moc/release-shared/moc_qabstractitemmodel.cpp:197
#39 0x000000378d9703cd in QAbstractItemModel::endInsertRows (this=0x3233740) at kernel/qabstractitemmodel.cpp:2433
#40 0x00007f51d69bc6b1 in TodoProxyModelBase::addChildNode (this=0x3233740, sourceIndex=..., parent=0x3c94590) at /usr/src/debug/zanshin-0.1.82/src/todoproxymodelbase.cpp:234
#41 0x00007f51d69be817 in TodoTreeModel::onSourceInsertRows (this=0x3233740, sourceIndex=<optimized out>, begin=<optimized out>, end=<optimized out>) at /usr/src/debug/zanshin-0.1.82/src/todotreemodel.cpp:96
#42 0x000000378d989f51 in QMetaObject::activate (sender=0x3c944e0, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1e680) at kernel/qobject.cpp:3546
#43 0x000000378d9d5cc4 in QAbstractItemModel::rowsInserted (this=<optimized out>, _t1=<optimized out>, _t2=0, _t3=2) at .moc/release-shared/moc_qabstractitemmodel.cpp:197
#44 0x000000378d9703cd in QAbstractItemModel::endInsertRows (this=0x3c944e0) at kernel/qabstractitemmodel.cpp:2433
#45 0x000000378d989f51 in QMetaObject::activate (sender=0x3c944b0, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1e840) at kernel/qobject.cpp:3546
#46 0x000000378d9d5cc4 in QAbstractItemModel::rowsInserted (this=<optimized out>, _t1=<optimized out>, _t2=0, _t3=2) at .moc/release-shared/moc_qabstractitemmodel.cpp:197
#47 0x000000378d9703cd in QAbstractItemModel::endInsertRows (this=0x3c944b0) at kernel/qabstractitemmodel.cpp:2433
#48 0x0000003799d01106 in Akonadi::EntityTreeModelPrivate::itemsFetched (this=0x3c97640, collectionId=22661, items=<optimized out>) at /usr/src/debug/kdepimlibs-4.7.1/akonadi/entitytreemodel_p.cpp:567
#49 0x0000003799d01943 in Akonadi::EntityTreeModelPrivate::itemsFetched (this=0x3c97640, items=...) at /usr/src/debug/kdepimlibs-4.7.1/akonadi/entitytreemodel_p.cpp:483
#50 0x000000378d989f51 in QMetaObject::activate (sender=0x3fc0d40, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1ec00) at kernel/qobject.cpp:3546
#51 0x0000003799d22e02 in Akonadi::ItemFetchJob::itemsReceived (this=<optimized out>, _t1=<optimized out>) at /usr/src/debug/kdepimlibs-4.7.1/x86_64-redhat-linux-gnu/akonadi/itemfetchjob.moc:106
#52 0x0000003799d23bf4 in timeout (this=0x3723030) at /usr/src/debug/kdepimlibs-4.7.1/akonadi/itemfetchjob.cpp:71
#53 Akonadi::ItemFetchJob::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /usr/src/debug/kdepimlibs-4.7.1/x86_64-redhat-linux-gnu/akonadi/itemfetchjob.moc:57
#54 0x000000378d989f51 in QMetaObject::activate (sender=0x3fc0d40, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fffedb1ed80) at kernel/qobject.cpp:3546
#55 0x0000003791541842 in KJob::result (this=<optimized out>, _t1=0x3fc0d40) at /usr/src/debug/kdelibs-4.7.1/x86_64-redhat-linux-gnu/kdecore/kjob.moc:208
#56 0x0000003791541880 in KJob::emitResult (this=0x3fc0d40) at /usr/src/debug/kdelibs-4.7.1/kdecore/jobs/kjob.cpp:312
#57 0x000000378d98f166 in QObject::event (this=0x3fc0d40, e=<optimized out>) at kernel/qobject.cpp:1194
#58 0x00000037907c4564 in notify_helper (e=0x3fd9b60, receiver=0x3fc0d40, this=0xed5440) at kernel/qapplication.cpp:4495
#59 QApplicationPrivate::notify_helper (this=0xed5440, receiver=0x3fc0d40, e=0x3fd9b60) at kernel/qapplication.cpp:4467
#60 0x00000037907c93f3 in QApplication::notify (this=0x7fffedb1f740, receiver=0x3fc0d40, e=0x3fd9b60) at kernel/qapplication.cpp:4356
#61 0x0000003791c504f6 in KApplication::notify (this=0x7fffedb1f740, receiver=0x3fc0d40, event=0x3fd9b60) at /usr/src/debug/kdelibs-4.7.1/kdeui/kernel/kapplication.cpp:311
#62 0x000000378d97616c in QCoreApplication::notifyInternal (this=0x7fffedb1f740, receiver=0x3fc0d40, event=0x3fd9b60) at kernel/qcoreapplication.cpp:853
#63 0x000000378d979a9e in sendEvent (event=0x3fd9b60, receiver=0x3fc0d40) at kernel/qcoreapplication.h:231
#64 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0xea5080) at kernel/qcoreapplication.cpp:1477
#65 0x000000378d9a4b83 in sendPostedEvents () at kernel/qcoreapplication.h:236
#66 postEventSourceDispatch (s=0xedaae0) at kernel/qeventdispatcher_glib.cpp:279
#67 0x000000386d6427ed in g_main_dispatch (context=0xed2c00) at gmain.c:2441
#68 g_main_context_dispatch (context=0xed2c00) at gmain.c:3014
#69 0x000000386d642fc8 in g_main_context_iterate (context=0xed2c00, block=<optimized out>, dispatch=1, self=<optimized out>) at gmain.c:3092
#70 0x000000386d64325c in g_main_context_iteration (context=0xed2c00, may_block=1) at gmain.c:3155
#71 0x000000378d9a4faf in QEventDispatcherGlib::processEvents (this=0xea6540, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:424
#72 0x0000003790866fbe in QGuiEventDispatcherGlib::processEvents (this=<optimized out>, flags=<optimized out>) at kernel/qguieventdispatcher_glib.cpp:207
#73 0x000000378d9752a2 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149
#74 0x000000378d9754f7 in QEventLoop::exec (this=0x7fffedb1f6d0, flags=...) at kernel/qeventloop.cpp:204
#75 0x000000378d979f35 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1125
#76 0x00000000004037a9 in ?? ()
#77 0x000000386b22139d in __libc_start_main (main=0x402cc0, argc=1, ubp_av=0x7fffedb1fd68, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffedb1fd58) at libc-start.c:226
#78 0x0000000000403cf1 in _start ()

Reported using DrKonqi
Comment 1 Kevin Ottens 2011-10-02 01:41:35 UTC
Git commit 3a220f833481047c21dffb910d930a25f8bbc391 by Kevin Ottens.
Committed on 02/10/2011 at 03:38.
Pushed by ervin into branch 'master'.

Workaround Qt 4.8 behavior change of QAbstractProxyModel

OK, that one was tough! Turns out that in Qt 4.8 the behavior of
QAbstractProxyModel changed because it now provides a reimplementation
of hasChildren() not based on rowCount() & columnCount(), but by
forwarding the request to the source model (which in my opinion doesn't
really make sense...).

Because of that, all the proxies or views on top of subclasses of
TodoProxyModelBase were getting totally confused because of
contradictions between hasChildren() and rowCount() results.

That explains the random crashes, or empty views experienced by users
running with Qt 4.8 beta.

Pfew! I'm glad I finally noticed those reports were mentionning Qt 4.8.

BUG: 283066
BUG: 283067

M  +5    -0    src/todoproxymodelbase.cpp
M  +1    -0    src/todoproxymodelbase.h

http://commits.kde.org/zanshin/3a220f833481047c21dffb910d930a25f8bbc391