Bug 304085 - Contact list crashed after unlocking screen
Summary: Contact list crashed after unlocking screen
Alias: None
Product: telepathy
Classification: Frameworks and Libraries
Component: contactlist (show other bugs)
Version: 0.4.0
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: Future
Assignee: Telepathy Bugs
: 306743 319525 (view as bug list)
Depends on:
Reported: 2012-07-26 11:49 UTC by Elias Probst
Modified: 2013-05-08 13:45 UTC (History)
6 users (show)

See Also:
Latest Commit:
Version Fixed In: 0.6.2

New crash information added by DrKonqi (7.09 KB, text/plain)
2012-10-29 22:57 UTC, Elias Probst

Note You need to log in before you can comment on or make changes to this bug.
Description Elias Probst 2012-07-26 11:49:54 UTC
Application: ktp-contactlist (0.4)
KDE Platform Version: 4.8.3 (4.8.3) (Compiled from sources)
Qt Version: 4.8.2
Operating System: Linux 3.5.0-gentoo x86_64
Distribution: "Gentoo Base System release 2.1"

-- Information about the crash:
- What I was doing when the application crashed:
→ Set the presence to 'Away' with a custom presence message
→ Left the computer
→ Returned after 1h
→ Unlocked the screen
→ Was greeted by a dialog, whether I want to enable the 'Now playing…' plugin and the presence was set to 'Now playing…'
→ Clicked 'No'
→ The dialog raised again
→ Clicked 'No' again
→ Contact list crashed

KDE 4.8.3
KTP from git, last built 2012-07-22
Qt 4.8.2
1 Jabber/XMPP account used

-- Backtrace:
Application: KDE Telepathy Contact List (ktp-contactlist), signal: Segmentation fault
[KCrash Handler]
#6  0x000000000043b5ed in parent (this=0xeb47a0) at /usr/include/qt4/QtCore/qabstractitemmodel.h:393
#7  PresenceModelExtended::data (this=0x802050, index=..., role=0) at /var/tmp/portage/net-im/ktp-contact-list-9999/work/ktp-contact-list-9999/global-presence-chooser.cpp:95
#8  0x00007f9471b14450 in QComboBoxPrivate::itemText (this=0x7f7c10, index=...) at widgets/qcombobox.cpp:1287
#9  0x00007f9471b1865a in QComboBoxPrivate::_q_emitCurrentIndexChanged (this=0x7f7c10, index=...) at widgets/qcombobox.cpp:1279
#10 0x00007f9471b1892a in QComboBoxPrivate::setCurrentIndex (this=0x7f7c10, mi=<optimized out>) at widgets/qcombobox.cpp:2046
#11 0x00007f9471b18a2c in QComboBox::setCurrentIndex (this=<optimized out>, index=9) at widgets/qcombobox.cpp:2022
#12 0x00007f9471b19e59 in QComboBoxPrivate::_q_rowsRemoved (this=0x7f7c10, parent=<optimized out>) at widgets/qcombobox.cpp:1071
#13 0x00007f9472b2f453 in QMetaObject::activate (sender=0x802050, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fff4f423cb0) at kernel/qobject.cpp:3547
#14 0x00007f9472b7a3e4 in QAbstractItemModel::rowsRemoved (this=<optimized out>, _t1=<optimized out>, _t2=9, _t3=9) at .moc/release-shared/moc_qabstractitemmodel.cpp:211
#15 0x00007f9472b13e3b in QAbstractItemModel::endRemoveRows (this=0x802050) at kernel/qabstractitemmodel.cpp:2487
#16 0x000000000043b185 in PresenceModelExtended::removeTemporaryPresence (this=<optimized out>) at /var/tmp/portage/net-im/ktp-contact-list-9999/work/ktp-contact-list-9999/global-presence-chooser.cpp:164
#17 0x000000000043bba0 in GlobalPresenceChooser::onPresenceChanged (this=0x6973c0, presence=...) at /var/tmp/portage/net-im/ktp-contact-list-9999/work/ktp-contact-list-9999/global-presence-chooser.cpp:354
#18 0x00007f9472b2f453 in QMetaObject::activate (sender=0x692440, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fff4f423fd0) at kernel/qobject.cpp:3547
#19 0x00007f947406d4b5 in KTp::GlobalPresence::currentPresenceChanged (this=<optimized out>, _t1=<optimized out>) at /var/tmp/portage/net-im/ktp-common-internals-9999/work/ktp-common-internals-9999_build/KTp/global-presence.moc:139
#20 0x00007f947406da97 in KTp::GlobalPresence::onCurrentPresenceChanged (this=0x692440) at /var/tmp/portage/net-im/ktp-common-internals-9999/work/ktp-common-internals-9999/KTp/global-presence.cpp:118
#21 0x00007f9472b2f453 in QMetaObject::activate (sender=0x93d130, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fff4f424280) at kernel/qobject.cpp:3547
#22 0x00007f9474336975 in Tp::Account::currentPresenceChanged (this=<optimized out>, _t1=<optimized out>) at /var/tmp/portage/net-libs/telepathy-qt-9999/work/telepathy-qt-9999_build/TelepathyQt/_gen/account.moc.hpp:413
#23 0x00007f9474345e18 in Tp::Account::Private::updateProperties (this=0x98aa70, props=...) at /var/tmp/portage/net-libs/telepathy-qt-9999/work/telepathy-qt-9999/TelepathyQt/account.cpp:4288
#24 0x00007f9472b2f453 in QMetaObject::activate (sender=0x7fad40, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fff4f424fb0) at kernel/qobject.cpp:3547
#25 0x00007f9474336ac5 in Tp::Client::AccountInterface::AccountPropertyChanged (this=<optimized out>, _t1=<optimized out>) at /var/tmp/portage/net-libs/telepathy-qt-9999/work/telepathy-qt-9999_build/TelepathyQt/_gen/cli-account.moc.hpp:134
#26 0x00007f9474336cad in Tp::Client::AccountInterface::qt_static_metacall (_o=0x7fad40, _c=<optimized out>, _id=1, _a=0x7fff4f4250b0) at /var/tmp/portage/net-libs/telepathy-qt-9999/work/telepathy-qt-9999_build/TelepathyQt/_gen/cli-account.moc.hpp:65
#27 0x00007f9474336e1b in Tp::Client::AccountInterface::qt_metacall (this=0x7fad40, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, _a=0x7fff4f4250b0) at /var/tmp/portage/net-libs/telepathy-qt-9999/work/telepathy-qt-9999_build/TelepathyQt/_gen/cli-account.moc.hpp:118
#28 0x00007f947273e97a in QDBusConnectionPrivate::deliverCall (this=0x68b910, object=0x7fad40, msg=..., metaTypes=..., slotIdx=9) at qdbusintegrator.cpp:947
#29 0x00007f9472b2e896 in QObject::event (this=0x7fad40, e=<optimized out>) at kernel/qobject.cpp:1195
#30 0x00007f947174d374 in QApplicationPrivate::notify_helper (this=0x6975d0, receiver=0x7fad40, e=0xd660b0) at kernel/qapplication.cpp:4551
#31 0x00007f9471751e4f in QApplication::notify (this=<optimized out>, receiver=0x7fad40, e=0xd660b0) at kernel/qapplication.cpp:4412
#32 0x00007f94737e8bd6 in KApplication::notify (this=0x7fff4f425ce0, receiver=0x7fad40, event=0xd660b0) at /var/tmp/portage/kde-base/kdelibs-4.8.3/work/kdelibs-4.8.3/kdeui/kernel/kapplication.cpp:311
#33 0x00007f9472b19c0b in QCoreApplication::notifyInternal (this=0x7fff4f425ce0, receiver=0x7fad40, event=0xd660b0) at kernel/qcoreapplication.cpp:915
#34 0x00007f9472b1d1d7 in sendEvent (event=0xd660b0, receiver=0x7fad40) at kernel/qcoreapplication.h:231
#35 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x6681b0) at kernel/qcoreapplication.cpp:1539
#36 0x00007f9472b48bd3 in sendPostedEvents () at kernel/qcoreapplication.h:236
#37 postEventSourceDispatch (s=<optimized out>) at kernel/qeventdispatcher_glib.cpp:279
#38 0x00007f946da6f262 in g_main_dispatch (context=0x696fc0) at gmain.c:2539
#39 g_main_context_dispatch (context=0x696fc0) at gmain.c:3075
#40 0x00007f946da6f5a8 in g_main_context_iterate (context=0x696fc0, block=1, dispatch=1, self=<optimized out>) at gmain.c:3146
#41 0x00007f946da6f664 in g_main_context_iteration (context=0x696fc0, may_block=1) at gmain.c:3207
#42 0x00007f9472b48d6f in QEventDispatcherGlib::processEvents (this=0x667a40, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:424
#43 0x00007f94717f273e in QGuiEventDispatcherGlib::processEvents (this=<optimized out>, flags=<optimized out>) at kernel/qguieventdispatcher_glib.cpp:204
#44 0x00007f9472b18972 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149
#45 0x00007f9472b18c25 in QEventLoop::exec (this=0x7fff4f425c30, flags=...) at kernel/qeventloop.cpp:204
#46 0x00007f9472b1d67b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1187
#47 0x0000000000435d65 in main (argc=1, argv=0x7fff4f425fb8) at /var/tmp/portage/net-im/ktp-contact-list-9999/work/ktp-contact-list-9999/main.cpp:62

Reported using DrKonqi
Comment 1 Martin Klapetek 2012-07-26 11:59:21 UTC
Thanks, great report.

My theory is that the custom auto-away presence message is inserted as the 'temp presence' to the combobox, then when it's removed before you're switched to available/the-presence-before, it automatically moves down in the list, which is now playing. Then something strange happens and it goes down.

Hopefully I'll be able to fix it before 0.5.
Comment 2 Martin Klapetek 2012-07-31 13:26:50 UTC
Git commit 67d235c46e492db89de25fc185201128d5be7bdc by Martin Klapetek.
Committed on 31/07/2012 at 15:22.
Pushed by mklapetek into branch 'master'.

Set the new presence first and only then remove the temp presence

Removing the temp presence first causes setting new selected index (as the currently selected one was just deleted) which is set to the next in the list, which in case of the temp presence is the 'Now playing...' one, which prompts the user for enabling it if it is disabled.
So now we first change the presence (and current index) and only then remove the temp presence, then it won't cause another unwanted index re-setting.

Reviewed-by: David Edmundson

M  +3    -2    global-presence-chooser.cpp

Comment 3 Elias Probst 2012-10-29 22:57:15 UTC
Created attachment 74873 [details]
New crash information added by DrKonqi

ktp-contactlist (0.5.1) on KDE Platform 4.9.2 using Qt 4.8.3

- What I was doing when the application crashed:
This happened right now again…
I restarted NetworkManager and once NetworkManager was down (it wasn't up again yet) contactlist showed the dialog:

This plugin is currently disabled. Do you want to enable it and use as your presence?

Once I responded with "No" contactlist crashed with the attached backtrace.

-- Backtrace (Reduced):
#6  0x000000000043f531 in parent (this=0x6978b0) at /usr/include/qt4/QtCore/qabstractitemmodel.h:393
#7  PresenceModelExtended::data (this=0x881680, index=..., role=0) at /var/tmp/portage/net-im/ktp-contact-list-9999/work/ktp-contact-list-9999/global-presence-chooser.cpp:95
#8  0x00007f2bb0dd5c40 in QComboBoxPrivate::itemText (this=0x8208b0, index=...) at widgets/qcombobox.cpp:1287
#9  0x00007f2bb0dd9e3a in QComboBoxPrivate::_q_emitCurrentIndexChanged (this=<optimized out>, index=...) at widgets/qcombobox.cpp:1279
#10 0x00007f2bb0dda10a in QComboBoxPrivate::setCurrentIndex (this=0x8208b0, mi=<optimized out>) at widgets/qcombobox.cpp:2046
Comment 4 Elias Probst 2012-10-29 22:59:45 UTC
I can reproduce this crash every time now.

I have the 'Now playing…' presence disabled in KTP settings.
Comment 5 Martin Klapetek 2013-01-04 12:08:41 UTC
*** Bug 306743 has been marked as a duplicate of this bug. ***
Comment 6 Martin Klapetek 2013-01-04 16:12:38 UTC
Elias, can you still reproduce this issue? And if so, are you using custom presence message for autoaway?
Comment 7 David Edmundson 2013-01-15 17:01:17 UTC
Git commit 3315e817fb1ce8fd802b9ff7e9aa665d352573ef by David Edmundson.
Committed on 15/01/2013 at 18:00.
Pushed by davidedmundson into branch 'master'.

Merge big model refactor.

Replace all the models used to power KTp

Subclass of Tp::Contact (KTp::Contact) to power the model
Create a list of contacts ContactListModel
Which can be grouped into AccountsTreeProxyModel or GroupsTreeProxyModel
Related: bug 307899, bug 282218, bug 279023

REVIEW: 107377
REVIEW: 107629


M  +5    -0    KTp/CMakeLists.txt

Comment 8 Martin Klapetek 2013-01-15 18:28:58 UTC
I don't think this bug was fixed changing models. This is with the presence chooser.
Comment 9 Daniele E. Domenichelli 2013-03-27 09:52:34 UTC
Is this bug still valid? Version Fixed in reports "0.5"
Comment 10 David Edmundson 2013-04-29 11:58:34 UTC
Git commit acc91df99a169e8528dc1ecabcc8239d3f30880b by David Edmundson.
Committed on 29/04/2013 at 03:54.
Pushed by davidedmundson into branch 'kde-telepathy-0.6'.

Remove pointless call to model index parent to count top level items
REVIEW: 110236

M  +3    -3    global-presence-chooser.cpp

Comment 11 Martin Klapetek 2013-05-08 13:45:28 UTC
*** Bug 319525 has been marked as a duplicate of this bug. ***