Bug 352881 - Falling back to legacy mode (with no DBus available) causes infinite recursion
Summary: Falling back to legacy mode (with no DBus available) causes infinite recursion
Status: RESOLVED DUPLICATE of bug 350785
Alias: None
Product: frameworks-knotifications
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Martin Klapetek
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-09-18 16:54 UTC by Jonathan Marten
Modified: 2015-09-18 18:32 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jonathan Marten 2015-09-18 16:54:54 UTC
This is an application which uses KStatusNotifierItem to place an icon in the system tray.  When run in a full desktop session everything works as expected.  If, however, it is run without access to the DBus session bus (e.g. by another user over an SSH session), there is an endless loop of error messages:

KStatusNotifierItemDBus::KStatusNotifierItemDBus: service is "org.kde.StatusNotifierItem-26078-464"
KStatusNotifierItemPrivate::registerToDaemon: Registering a client interface to the KStatusNotifierWatcher
KStatusNotifierItemPrivate::registerToDaemon: KStatusNotifierWatcher not reachable
QSystemTrayIcon::setVisible: QSystemTrayIcon::setVisible: No Icon set

The CPU runs at 100% and the application memory grows until OOM killed.

Running under GDB with a breakpoint at KStatusNotifierItemPrivate::registerToDaemon, after a few loops, gives the following backtrace:

#0  KStatusNotifierItemPrivate::registerToDaemon (this=this@entry=0x72d9c0)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:726
#1  0x00007ffff794aebf in KStatusNotifierItemPrivate::init (this=this@entry=0x72d9c0, 
    extraId=...) at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:722
#2  0x00007ffff794b2ce in KStatusNotifierItem::KStatusNotifierItem (this=0x72cea0, 
    parent=<optimized out>)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:55
#3  0x00007fffe4fe4837 in KDEPlatformSystemTrayIcon::init (this=0x72c9d0)
    at /ws/frameworks/tier4/frameworkintegration/src/platformtheme/kdeplatformsystemtrayicon.cpp:270
#4  0x00007ffff4c38be1 in QSystemTrayIconPrivate::install_sys_qpa (this=this@entry=0x72d660)
    at util/qsystemtrayicon.cpp:684
#5  0x00007ffff4c58a3e in QSystemTrayIconPrivate::install_sys (this=this@entry=0x72d660)
    at util/qsystemtrayicon_x11.cpp:280
#6  0x00007ffff4c38838 in QSystemTrayIcon::setVisible (this=<optimized out>,
    visible=visible@entry=true) at util/qsystemtrayicon.cpp:271
#7  0x00007ffff7948a15 in show (this=<optimized out>)
    at /usr/kde5/include/QtWidgets/qsystemtrayicon.h:95
#8  KStatusNotifierItemPrivate::setLegacySystemTrayEnabled (this=this@entry=0x7340a0,
    enabled=enabled@entry=true)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:808
#9  0x00007ffff7949a24 in KStatusNotifierItemPrivate::registerToDaemon (
    this=this@entry=0x7340a0)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:744
#10 0x00007ffff794aebf in KStatusNotifierItemPrivate::init (this=this@entry=0x7340a0,
    extraId=...) at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:722
#11 0x00007ffff794b2ce in KStatusNotifierItem::KStatusNotifierItem (this=0x733450,
    parent=<optimized out>)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:55
#12 0x00007fffe4fe4837 in KDEPlatformSystemTrayIcon::init (this=0x732f00)
    at /ws/frameworks/tier4/frameworkintegration/src/platformtheme/kdeplatformsystemtrayicon.cpp:270
#13 0x00007ffff4c38be1 in QSystemTrayIconPrivate::install_sys_qpa (this=this@entry=0x733f70)
    at util/qsystemtrayicon.cpp:684
#14 0x00007ffff4c58a3e in QSystemTrayIconPrivate::install_sys (this=this@entry=0x733f70)
    at util/qsystemtrayicon_x11.cpp:280
#15 0x00007ffff4c38838 in QSystemTrayIcon::setVisible (this=<optimized out>,
    visible=visible@entry=true) at util/qsystemtrayicon.cpp:271
#16 0x00007ffff7948a15 in show (this=<optimized out>)
    at /usr/kde5/include/QtWidgets/qsystemtrayicon.h:95
#17 KStatusNotifierItemPrivate::setLegacySystemTrayEnabled (this=this@entry=0x6f6260,
    enabled=enabled@entry=true)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:808
#18 0x00007ffff7949a24 in KStatusNotifierItemPrivate::registerToDaemon (
    this=this@entry=0x6f6260)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:744
#19 0x00007ffff794aebf in KStatusNotifierItemPrivate::init (this=this@entry=0x6f6260,
    extraId=...) at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:722
#20 0x00007ffff794b2ce in KStatusNotifierItem::KStatusNotifierItem (this=0x6ee860,
    parent=<optimized out>)
    at /ws/frameworks/tier3/knotifications/src/kstatusnotifieritem.cpp:55
#21 0x0000000000411203 in SystemTrayWidget::SystemTrayWidget (this=0x6ee860,
    parent=0x6c9330) at /ws/jjm-kde5/consoleviewer/src/systemtraywidget.cpp:51
---Type <return> to continue, or q <return> to quit---

It seems that KStatusNotifierItemPrivate::registerToDaemon(), if the DBus connection fails, tries to do:

setLegacySystemTrayEnabled(true)
  QSystemTrayIcon::show()
    KDEPlatformSystemTrayIcon::init()
      new KStatusNotifierItem()
      // infinite recursion!

Running a system tray application in this situation used to work in KDE4.


Reproducible: Always

Steps to Reproduce:
1.  Run a system tray application with DBUS_SESSION_BUS_ADDRESS set correctly.  Observe correct behaviour.

2.  Run the same application with DBUS_SESSION_BUS_ADDRESS set to a rubbish value (not unset, because this means the same as autolaunch).  Observe the infinite loop.
Comment 1 Jonathan Marten 2015-09-18 16:56:53 UTC
Bug 350288 has a different backtrace, but also mentions possible recursion.
Comment 2 Martin Klapetek 2015-09-18 18:32:25 UTC

*** This bug has been marked as a duplicate of bug 350785 ***