Review Request 128681: Get StatusNotifierWatcher property ProtocolVersion in async way

Marco Martin notmart at gmail.com
Mon Aug 15 09:07:53 UTC 2016


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/128681/#review98391
-----------------------------------------------------------


Ship it!




Ship It!

- Marco Martin


On Aug. 15, 2016, 7:36 a.m., Martin Gräßlin wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/128681/
> -----------------------------------------------------------
> 
> (Updated Aug. 15, 2016, 7:36 a.m.)
> 
> 
> Review request for KDE Frameworks, Bhushan Shah and Marco Martin.
> 
> 
> Repository: knotifications
> 
> 
> Description
> -------
> 
> The ProtocolVersion property was read in a blocking way resulting in a
> freeze of the windowing systems. See [1]. A way to reproduce this is:
> 
> 1. Start a new DBus session through
>    export $(dbus-launch)
> 2. Start a nested KWin:
>    kwin_wayland --xwayland konsole
> 3. Lock the screen, by e.g. entering in the konsole
>    qdbus org.freedesktop.ScreenSaver /org/freedesktop/ScreenSaver SetActive true
> 4. Now observe the freeze of KWin if KWin has Virtual Keyboard support
>    (which uses an SNI)
> 
> This change gets the ProtocolVersion property in an async way by using a
> QDBusPendingCallWatcher. With this change the above steps do not result
> in a freeze of the windowing system any more and the availablility of the
> SNIWatcher is correctly recognized.
> 
> [1]
> 0  pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
> 1  0x00007fffef6c1b9b in QWaitConditionPrivate::wait (time=18446744073709551615, this=0x2c47dc0) at thread/qwaitcondition_unix.cpp:143
> 2  QWaitCondition::wait (this=this at entry=0xb826e0, mutex=mutex at entry=0xb826d8, time=time at entry=18446744073709551615) at thread/qwaitcondition_unix.cpp:215
> 3  0x00007ffff0bbda24 in QDBusPendingCallPrivate::waitForFinished (this=this at entry=0xb826a0) at qdbuspendingcall.cpp:240
> 4  0x00007ffff0b7c080 in QDBusConnectionPrivate::sendWithReply (this=0x7fffd8003460, message=..., sendMode=1, timeout=-1) at qdbusintegrator.cpp:2035
> 5  0x00007ffff0b69fe3 in QDBusConnection::call (this=this at entry=0x63ad40, message=..., mode=mode at entry=QDBus::Block, timeout=<optimized out>) at qdbusconnection.cpp:697
> 6  0x00007ffff0b84edc in QDBusAbstractInterfacePrivate::property (this=0x63acd0, mp=..., returnValuePtr=0x7fffffffc7e0) at qdbusabstractinterface.cpp:179
> 7  0x00007ffff0b8728b in QDBusAbstractInterfaceBase::qt_metacall (this=this at entry=0x1380810, _c=_c at entry=QMetaObject::ReadProperty, _id=<optimized out>, _a=_a at entry=0x7fffffffc810) at qdbusabstractinterface.cpp:290
> 8  0x00007ffff0b873f7 in QDBusAbstractInterface::qt_metacall (this=0x1380810, _c=QMetaObject::ReadProperty, _id=<optimized out>, _a=0x7fffffffc810) at .moc/moc_qdbusabstractinterface.cpp:97
> 9  0x00007ffff4631526 in OrgKdeStatusNotifierWatcherInterface::qt_metacall (this=0x1380810, _c=QMetaObject::ReadProperty, _id=2, _a=0x7fffffffc810) at /opt/build/kf5/frameworks/knotifications/src/statusnotifierwatcher_interface.moc:188
> 10 0x00007fffef894d6e in QMetaProperty::read (this=this at entry=0x7fffffffc880, object=object at entry=0x1380810) at kernel/qmetaobject.cpp:3027
> 11 0x00007fffef8b011f in QObject::property (this=0x1380810, name=0x7ffff4636d99 "ProtocolVersion") at kernel/qobject.cpp:3920
> 12 0x00007ffff4614085 in KStatusNotifierItemPrivate::registerToDaemon (this=0x1375020) at /home/martin/src/kf5/frameworks/knotifications/src/kstatusnotifieritem.cpp:738
> 13 0x00007ffff46143d2 in KStatusNotifierItemPrivate::setLegacyMode (this=0x1375020, legacy=false) at /home/martin/src/kf5/frameworks/knotifications/src/kstatusnotifieritem.cpp:776
> 14 0x00007ffff4614300 in KStatusNotifierItemPrivate::serviceChange (this=0x1375020, name=..., oldOwner=..., newOwner=...) at /home/martin/src/kf5/frameworks/knotifications/src/kstatusnotifieritem.cpp:759
> 15 0x00007ffff4615746 in KStatusNotifierItem::qt_static_metacall (_o=0x1384a00, _c=QMetaObject::InvokeMetaMethod, _id=5, _a=0x7fffffffcca0) at /opt/build/kf5/frameworks/knotifications/src/moc_kstatusnotifieritem.cpp:184
> 16 0x00007fffef8b1389 in QMetaObject::activate (sender=sender at entry=0x1385ec0, signalOffset=<optimized out>, local_signal_index=local_signal_index at entry=2, argv=argv at entry=0x7fffffffcca0) at kernel/qobject.cpp:3740
> 17 0x00007fffef8b1d47 in QMetaObject::activate (sender=sender at entry=0x1385ec0, m=m at entry=0x7ffff0bd9a40 <QDBusServiceWatcher::staticMetaObject>, local_signal_index=local_signal_index at entry=2, argv=argv at entry=0x7fffffffcca0)
>     at kernel/qobject.cpp:3602
> 18 0x00007ffff0bbed1f in QDBusServiceWatcher::serviceOwnerChanged (this=this at entry=0x1385ec0, _t1=..., _t2=..., _t3=...) at .moc/moc_qdbusservicewatcher.cpp:222
> 19 0x00007ffff0bbedbf in QDBusServiceWatcherPrivate::_q_serviceOwnerChanged (this=<optimized out>, service=..., oldOwner=..., newOwner=...) at qdbusservicewatcher.cpp:76
> 20 0x00007ffff0bbf2bf in QDBusServiceWatcher::qt_static_metacall (_o=_o at entry=0x1385ec0, _c=_c at entry=QMetaObject::InvokeMetaMethod, _id=_id at entry=3, _a=_a at entry=0x7fffffffce60) at .moc/moc_qdbusservicewatcher.cpp:99
> 21 0x00007ffff0bbf650 in QDBusServiceWatcher::qt_metacall (this=0x1385ec0, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0x7fffffffce60) at .moc/moc_qdbusservicewatcher.cpp:177
> 22 0x00007ffff0b74fb3 in QDBusConnectionPrivate::deliverCall (this=<optimized out>, object=<optimized out>, msg=..., metaTypes=..., slotIdx=<optimized out>) at qdbusintegrator.cpp:983
> 23 0x00007fffef8b21c1 in QObject::event (this=0x1385ec0, e=<optimized out>) at kernel/qobject.cpp:1263
> 24 0x00007ffff015822c in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x1385ec0, e=0x7fffd8016bb0) at kernel/qapplication.cpp:3799
> 25 0x00007ffff015f5e6 in QApplication::notify (this=0x7fffffffd580, receiver=0x1385ec0, e=0x7fffd8016bb0) at kernel/qapplication.cpp:3556
> 26 0x00007fffef888398 in QCoreApplication::notifyInternal2 (receiver=0x1385ec0, event=event at entry=0x7fffd8016bb0) at kernel/qcoreapplication.cpp:988
> 27 0x00007fffef88a98b in QCoreApplication::sendEvent (event=0x7fffd8016bb0, receiver=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
> 28 QCoreApplicationPrivate::sendPostedEvents (receiver=receiver at entry=0x0, event_type=event_type at entry=0, data=0x639430) at kernel/qcoreapplication.cpp:1649
> 29 0x00007fffef8d555a in QEventDispatcherUNIX::processEvents (this=0x64f020, flags=..., flags at entry=...) at kernel/qeventdispatcher_unix.cpp:461
> 30 0x00007fffdf811cfd in QUnixEventDispatcherQPA::processEvents (this=<optimized out>, flags=...) at eventdispatchers/qunixeventdispatcher.cpp:68
> 31 0x00007fffef88690a in QEventLoop::exec (this=this at entry=0x7fffffffd340, flags=..., flags at entry=...) at kernel/qeventloop.cpp:210
> 32 0x00007fffef88e8ed in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1261
> 33 0x000000000040ca2d in main (argc=5, argv=0x7fffffffdf68) at /home/martin/src/kf5/kde/workspace/kwin/main_wayland.cpp:741
> 
> 
> Diffs
> -----
> 
>   src/kstatusnotifieritem.cpp 27abfb8fad5fb49476d6b2dd619fbbe97f2913fc 
> 
> Diff: https://git.reviewboard.kde.org/r/128681/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Martin Gräßlin
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20160815/302aef96/attachment.html>


More information about the Kde-frameworks-devel mailing list