Fix segfault with missing screens

Review Request #122909 - Created March 11, 2015 and submitted

Jan Kundrát
Fix segfault with missing screens

This is to keep up with the Qt 5.5 changes with null QScreen. BT:

 #0  XInternAtom (dpy=0x0, name=0x7f1195725664 "_KDE_NET_WM_SHADOW", onlyIfExists=0)
     at /var/tmp/portage/x11-libs/libX11-1.6.2/work/libX11-1.6.2/src/IntAtom.c:174
 #1  0x00007f11956e438c in PanelShadows::Private::clearShadow (this=<optimized out>, window=0x7f119958ff90)
     at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/panelshadows.cpp:494
 #2  0x00007f11956e7139 in PanelShadows::removeWindow (this=0x7f119593b060 <(anonymous namespace)::Q_QGS_privateDialogShadowsSelf::innerFunction()::holder>, window=window@entry=0x7f119958ff90)
     at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/panelshadows.cpp:142
 #3  0x00007f11956dd8f5 in PanelView::~PanelView (this=0x7f119958ff90, __in_chrg=<optimized out>)
     at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/panelview.cpp:124
 #4  0x00007f11956dd9af in PanelView::~PanelView (this=0x7f119958ff90, __in_chrg=<optimized out>)
     at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/panelview.cpp:125
 #5  0x00007f11956effa8 in ShellCorona::removeView (this=0x7f1196c19b40, idx=0) at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/shellcorona.cpp:710
 #6  0x00007f11956f0038 in ShellCorona::remove (this=this@entry=0x7f1196c19b40, desktopView=<optimized out>)
     at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/shellcorona.cpp:662
 #7  0x00007f11956f009f in ShellCorona::screenRemoved (this=0x7f1196c19b40, screen=<optimized out>)
     at /var/tmp/portage/kde-plasma/plasma-workspace-5.2.1/work/plasma-workspace-5.2.1/shell/shellcorona.cpp:743



  • 1
  • 0
  • 0
  • 1
Description From Last Updated
This is wrong. It will now cause pixmap leakage. Martin Flöser Martin Flöser
Lukáš Tinkl
Jan Kundrát
Review request changed

Status: Closed (submitted)

Change Summary:

Submitted with commit aba0ad12685e2946a42d6a60d8cca58aa24b6d2a by Jan Kundrát to branch master.
Martin Flöser

shell/panelshadows.cpp (Diff revision 1)

This is wrong. It will now cause pixmap leakage.

Martin Flöser

For the record I reverted with

The reason for revertion is that it leaks pixmaps.
QX11Info::display should not return a nullptr if there is no QScreen.
This needs fixing in Qt, not workarounds in our software. None of our
X11 specific code in plasma-workspace or frameworks can handle the case
that the Display* or xcb_connection_t* becomes null suddenly. Neither
can Qt internally. If it would happen Qt would abort.

The only application in our workspace which would be "somewhat" safe
is KWin because it caches the returned Display after first invokation
to QX11Info::display.
  1. Now someone has told me about the problem, I can fix this trivially in Qt.