Bug 185343 - plasma crashes on login inside FolderView -> no desktop or kicker visible
Summary: plasma crashes on login inside FolderView -> no desktop or kicker visible
Status: RESOLVED NOT A BUG
Alias: None
Product: plasma4
Classification: Plasma
Component: widget-folderview (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-02-23 15:08 UTC by Peter Oberndorfer
Modified: 2009-02-24 09:01 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 Peter Oberndorfer 2009-02-23 15:08:23 UTC
Version:            (using Devel)
OS:                Linux
Installed from:    Compiled sources

I did not cleanly shutdown my KDE session in Xephyr.
On next start after kdelibs/kdebase update i get a crash(verytime) when running plasma.

I have no kicker or desktop background running after logging!
A normal user will no be able to start any program.

Problem sems to be that FolderView::createConfigurationInterface is called before
FolderView::init is called ->m_actionCollection has no entries and the following
line segfaults
uiDisplay.sortCombo->addItem(m_actionCollection.action("sort_name")->text(), KDirModel::Name);
since m_actionCollection.action("sort_name") return 0

Question what happens when FolderView::createActions()
if (KAuthorized::authorize("editable_desktop_icons")) {
evaluates to false
m_actionCollection.addAction(.... is not called
couldn't this also cause a crash later at uiDisplay.sortCombo->addItem(m_actionCollection.action("sort_name")->text(), KDirModel::Name); ?


kde-devel@hostname ~/kde/src $ gdb plasma
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  ":1.137" status change, old owner: "" new: ":1.137"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared ":1.137"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  "org.kde.kbuildsycoca4-21807" status change, old owner: "" new: ":1.137"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared "org.kde.kbuildsycoca4-21807"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  "org.kde.kbuildsycoca" status change, old owner: "" new: ":1.137"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared "org.kde.kbuildsycoca"
plasma-desktop(21292)/kdecore (KSycoca) KSycocaPrivate::openDatabase: Trying to open ksycoca from  "/var/tmp/kdecache-kde-devel/ksycoca4"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  "org.kde.kbuildsycoca" status change, old owner: ":1.137" new: ""
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  "org.kde.kbuildsycoca4-21807" status change, old owner: ":1.137" new: ""
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  ":1.137" status change, old owner: ":1.137" new: ""
run --nofork
Starting program: /home/kde-devel/kde/bin/plasma --nofork
[Thread debugging using libthread_db enabled]
[New Thread 0xb439f6f0 (LWP 21808)]
<unknown program name>(21808)/ checkComposite: Plasma lacks an argb visual 0x0 0
<unknown program name>(21808)/ checkComposite: Plasma is COMPOSITE-less on 0x8053cc8
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  ":1.138" status change, old owner: "" new: ":1.138"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared ":1.138"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::serviceChange: Service  "org.kde.plasma" status change, old owner: "" new: ":1.138"
plasma-desktop(21292)/plasma SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared "org.kde.plasma"
Qt: gdb: -nograb added to command-line options.
         Use the -dograb option to enforce grabbing.
plasma(21808) PlasmaApp::PlasmaApp: Setting the pixmap cache size to 36308 kilobytes
plasma(21808)/libplasma Plasma::Theme::setThemeName:
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::KDirWatchPrivate: Available methods:  ("Stat", "INotify")
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::addEntry: Added File "/home/kde-devel/.kde4/share/config/plasmarc" for "" ["KDirWatch-1"]
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::useINotify: trying to use inotify for monitoring
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::useINotify: inotify successfully used for monitoring
plasma(21808)/kdecore (KSycoca) KSycocaPrivate::openDatabase: Trying to open ksycoca from  "/var/tmp/kdecache-kde-devel/ksycoca4"
plasma(21808) DesktopCorona::loadDefaultLayout: number of screens is 1
plasma(21808) DesktopCorona::loadDefaultLayout:      screen  0 geometry is QRect(0,0 1280x960)
plasma(21808)/libplasma Plasma::Containment::setScreen: setting screen to  0 0 and type is -1
plasma(21808) FolderView::FolderView: calling constructor1
plasma(21808) FolderView::FolderView: calling constructor2
plasma(21808) FolderView::FolderView: calling constructor finished
plasma(21808) PlasmaApp::createView: Containment name: "Desktop" | type -1 | screen: 0 | desktop: 0 | geometry: QRectF(0,0 800x600) | zValue: 0
plasma(21808) PlasmaApp::createView: creating a new view for 0 0 and we have 1 screens
plasma(21808) DesktopView::adjustSize: screen -1 geom QRect(0,0 1280x960)
plasma(21808) DesktopView::adjustSize: Containment's geom after resize QRectF(0,0 1280x960)
plasma(21808) DesktopView::adjustSize: Done -1 QRect(0,0 1280x960)
plasma(21808)/libplasma Plasma::ContainmentPrivate::positionPanel: no scene yet
plasma(21808)/libplasma Plasma::ContainmentPrivate::positionPanel: positioning non- horizontal panel; forced? false
plasma(21808)/libplasma Plasma::ContainmentPrivate::positionPanel: moved to QPointF(11286, -41)
plasma(21808)/libplasma Plasma::Containment::setScreen: setting screen to  0 -1 and type is 1
plasma(21808) DesktopView::screenOwnerChanged: was: -1 is: 0 my screen: -1 containment: Panel(0x81a9710) myself: DesktopView(0x81d1bc0)
plasma(21808) Panel::constraintsEvent: constraints updated with 46 !!!!!!
plasma(21808)/libplasma Plasma::ContainmentPrivate::positionPanel: positioning  horizontal panel; forced? true
plasma(21808)/libplasma Plasma::ContainmentPrivate::positionPanel: moved to QPointF(0, -41)
QLayout: Attempting to add QLayout "" to QWidget "", which already has a layout
plasma(21808) SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared "org.kde.SystemTrayDaemon"
plasma(21808)/kdecore (KLibLoader) kde4Factory: The library "/home/kde-devel/kde/lib/kde4/solid_hal_power.so" does not offer a qt_plugin_instance function.
QStringList Solid::Backends::Hal::HalManager::findDeviceByDeviceInterface(const Solid::DeviceInterface::Type&)  error:  "org.freedesktop.DBus.Error.ServiceUnknown"

QStringList Solid::Backends::Hal::HalManager::findDeviceByDeviceInterface(const Solid::DeviceInterface::Type&)  error:  "org.freedesktop.DBus.Error.ServiceUnknown"

QStringList Solid::Backends::Hal::HalManager::findDeviceByDeviceInterface(const Solid::DeviceInterface::Type&)  error:  "org.freedesktop.DBus.Error.ServiceUnknown"

plasma(21808) Solid::Control::ManagerBasePrivate::loadBackend: Backend loaded:  "HAL-Power"
QStringList Solid::Backends::Hal::HalManager::findDeviceByDeviceInterface(const Solid::DeviceInterface::Type&)  error:  "org.freedesktop.DBus.Error.ServiceUnknown"

plasma(21808) PlasmaApp::createView: Containment name: "Panel" | type 1 | screen: 0 | desktop: -1 | geometry: QRectF(0,-41 1280x35) | zValue: 150
plasma(21808) PanelView::PanelView: Panel geometry is QRectF(0,-41 1280x35)
plasma(21808) PanelView::pinchContainment: **************************** pinching QRect(0,0 1280x960) 1280
plasma(21808) PanelView::updatePanelGeometry: New panel geometry is QRectF(0,-41 1280x35)
plasma(21808) PanelView::updatePanelGeometry: PanelView(0x8342a88) thinks its panel is at  QRect(0,925 1280x35) was QRect(0,0 640x384)
plasma(21808) PanelView::pinchContainment: Done pinching, containement's geom QRectF(0,-41 1280x35) own geom QRect(0,925 1280x35)
plasma(21808) DesktopCorona::addDesktopContainment: 0 -1
plasma(21808) PlasmaApp::createView: Containment name: "Desktop" | type 0 | screen: -1 | desktop: -1 | geometry: QRectF(0,0 800x600) | zValue: 0
plasma(21808)/libplasma Plasma::Containment::setScreen: setting screen to  0 -1 and type is 0
plasma(21808) DesktopView::screenOwnerChanged: was: -1 is: 0 my screen: -1 containment: DefaultDesktop(0x83440b0) myself: DesktopView(0x81d1bc0)
plasma(21808) PlasmaApp::createView: Containment name: "Desktop Activity" | type 0 | screen: 0 | desktop: -1 | geometry: QRectF(1286,0 1280x960) | zValue: 0
plasma(21808) PlasmaApp::createView: creating a new view for 0 -1 and we have 1 screens
plasma(21808) DesktopView::adjustSize: screen -1 geom QRect(0,0 1280x960)
plasma(21808) DesktopView::adjustSize: Containment's geom after resize QRectF(1286,0 1280x960)
plasma(21808) DesktopView::adjustSize: Done -1 QRect(0,0 1280x960)
plasma(21808) PlasmaApp::corona:  ------------------------------------------> 1052
plasma(21808) SystemTray::DBusSystemTrayProtocol::serviceChange: Service  "org.kde.plasma" status change, old owner: "" new: ":1.138"
plasma(21808) SystemTray::DBusSystemTrayProtocol::registerWatcher: service appeared "org.kde.plasma"
plasma(21808) Panel::constraintsEvent: constraints updated with 2 !!!!!!
plasma(21808) Panel::constraintsEvent: constraints updated with 1 !!!!!!
plasma(21808) Panel::constraintsEvent: constraints updated with 2 !!!!!!
plasma(21808)/libplasma Plasma::Containment::setScreen: setting screen to  0 -1 and type is 1
plasma(21808)/libplasma Plasma::Containment::setScreen: setting screen to  0 -1 and type is 1
plasma(21808)/libplasma Plasma::ViewPrivate::updateSceneRect: !!!!!!!!!!!!!!!!! setting the scene rect to QRectF(0,-41 1280x35) associated screen is 0
plasma(21808) PanelView::updatePanelGeometry: New panel geometry is QRectF(0,-41 1280x35)
plasma(21808) PanelView::updatePanelGeometry: PanelView(0x8342a88) thinks its panel is at  QRect(0,925 1280x35) was QRect(0,925 1280x35)
plasma(21808) PanelView::updatePanelGeometry: New panel geometry is QRectF(0,-41 1280x35)
plasma(21808) PanelView::updatePanelGeometry: PanelView(0x8342a88) thinks its panel is at  QRect(0,925 1280x35) was QRect(0,925 1280x35)
plasma(21808) PanelView::updateStruts: screen l/r/b/t offsets are: 0 0 0 0 4
plasma(21808) Panel::constraintsEvent: constraints updated with 2 !!!!!!
plasma(21808) Panel::constraintsEvent: constraints updated with 4 !!!!!!
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::addEntry: Added File "/home/kde-devel/.local/share//user-places.xbel" for "" ["KDirWatch-2"]
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::useINotify: trying to use inotify for monitoring
plasma(21808)/kio (KDirWatch) KDirWatchPrivate::useINotify: inotify successfully used for monitoring
plasma(21808)/kio (bookmarks) KBookmarkManager::KBookmarkManager: starting KDirWatch for  "/home/kde-devel/.local/share//user-places.xbel"
plasma(21808)/kio (KDirListerCache) KDirListerCache::listDir: Listing directory: KUrl("trash:/")
plasma(21808) FolderView::createConfigurationInterface: we have 0 elements in m_actionCollection

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb439f6f0 (LWP 21808)]
0xb69b6594 in QAction::text (this=0x0) at kernel/qaction.h:62
62      class QActionGroup;
(gdb) bt
#0  0xb69b6594 in QAction::text (this=0x0) at kernel/qaction.h:62
#1  0xa9362707 in FolderView::createConfigurationInterface (this=0x81a4a70, parent=0x82cc4f0) at /home/kde-devel/kde/src/kdebase/apps/plasma/applets/folderview/folderview.cpp:456
#2  0xb7db98f8 in Plasma::AppletPrivate::generateGenericConfigDialog (this=0x8177b20) at /home/kde-devel/kde/src/kdelibs/plasma/applet.cpp:1574
#3  0xb7db9f65 in Plasma::Applet::showConfigurationInterface (this=0x81a4a70) at /home/kde-devel/kde/src/kdelibs/plasma/applet.cpp:1551
#4  0xb7dd0a61 in Plasma::Containment::showConfigurationInterface (this=0x81a4a70) at /home/kde-devel/kde/src/kdelibs/plasma/containment.cpp:1474
#5  0xb7f1df68 in DesktopCorona::saveDefaultSetup (this=0x807caa0) at /home/kde-devel/kde/src/kdebase/workspace/plasma/shells/desktop/desktopcorona.cpp:228
#6  0xb7f1fd88 in DesktopCorona::qt_metacall (this=0x807caa0, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0xbfe94128)
    at /home/kde-devel/kde/build/kdebase/workspace/plasma/shells/desktop/desktopcorona.moc:70
#7  0xb679f106 in QMetaObject::activate (sender=0x8343dd0, from_signal_index=<value optimized out>, to_signal_index=4, argv=<value optimized out>) at kernel/qobject.cpp:3052
#8  0xb679f740 in QMetaObject::activate (sender=0x8343dd0, m=0xb683b884, local_signal_index=0, argv=0x0) at kernel/qobject.cpp:3127
#9  0xb67a609f in QSingleShotTimer::timeout (this=0x8343dd0) at .moc/debug-shared/qtimer.moc:76
#10 0xb67a6198 in QSingleShotTimer::timerEvent (this=0x8343dd0) at kernel/qtimer.cpp:293
#11 0xb679b4c3 in QObject::event (this=0x8343dd0, e=0xbfe94608) at kernel/qobject.cpp:1068
#12 0xb69bb436 in QApplicationPrivate::notify_helper (this=0x807caf0, receiver=0x8343dd0, e=0xbfe94608) at kernel/qapplication.cpp:4051
#13 0xb69c14c1 in QApplication::notify (this=0x8070428, receiver=0x8343dd0, e=0xbfe94608) at kernel/qapplication.cpp:3598
#14 0xb76c1914 in KApplication::notify (this=0x8070428, receiver=0x8343dd0, event=0xbfe94608) at /home/kde-devel/kde/src/kdelibs/kdeui/kernel/kapplication.cpp:307
#15 0xb678a826 in QCoreApplication::notifyInternal (this=0x8070428, receiver=0x8343dd0, event=0xbfe94608) at kernel/qcoreapplication.cpp:590
#16 0xb67b6516 in QTimerInfoList::activateTimers (this=0x8085e9c) at kernel/qcoreapplication.h:208
#17 0xb67b3c12 in timerSourceDispatch (source=0x8085e68) at kernel/qeventdispatcher_glib.cpp:159
#18 0xb5445df5 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#19 0xb5449089 in g_main_context_iterate () from /usr/lib/libglib-2.0.so.0
#20 0xb5449586 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#21 0xb67b4538 in QEventDispatcherGlib::processEvents (this=0x8084778, flags=@0xbfe94778) at kernel/qeventdispatcher_glib.cpp:318
#22 0xb6a499fd in QGuiEventDispatcherGlib::processEvents (this=0x8084778, flags=@0xbfe947a8) at kernel/qguieventdispatcher_glib.cpp:197
#23 0xb6789b55 in QEventLoop::processEvents (this=0xbfe94810, flags=@0xbfe947e8) at kernel/qeventloop.cpp:144
#24 0xb6789cd2 in QEventLoop::exec (this=0xbfe94810, flags=@0xbfe94818) at kernel/qeventloop.cpp:191
#25 0xb678bdbf in QCoreApplication::exec () at kernel/qcoreapplication.cpp:872
#26 0xb69baa4f in QApplication::exec () at kernel/qapplication.cpp:3526
#27 0xb7f243b9 in kdemain (argc=2, argv=0xbfe949c4) at /home/kde-devel/kde/src/kdebase/workspace/plasma/shells/desktop/main.cpp:54
#28 0x08048762 in main (argc=1919906560, argv=0x69735f74) at /home/kde-devel/kde/build/kdebase/workspace/plasma/shells/desktop/plasma_qgv_dummy.cpp:3
(gdb)
Comment 1 Peter Oberndorfer 2009-02-23 15:38:31 UTC
if i work aound the crash by not accessing the text() when m_actionCollection.action() returns 0
it is caught in a "endless" loop
    for (int i = 0; i < uiDisplay.sortCombo->maxCount(); i++) {
       if (m_sortColumn == uiDisplay.sortCombo->itemData(i).toInt()) {
           uiDisplay.sortCombo->setCurrentIndex(i);
           break;
       }
    }

uiDisplay.sortCombo->maxCount() returns 0x7fffffff

and if that one is commented out it crashes later somewhere else..
and many settings dialogs show up
Pager Settings, Folder View Settings, Device Notifier Settings, Application Launcher Settings, Desktop Settings


Another note:
launching plasma-desktop instead of plasma does not cause this problems
Comment 2 Aaron J. Seigo 2009-02-24 09:01:51 UTC
/home/kde-devel/kde/src/kdebase/workspace/plasma/shells/desktop/desktopcorona.cpp:228

is a call to applet->init();

but instead, 

Plasma::Containment::showConfigurationInterface

is being called. you have a mismatch between the plasma library and the applet and/or the plasma binary. perhaps you are still running plasma instead of plasma-desktop and are compiling from trunk? in any case, this a BIC issue and most likely a PEBCAK issue.