Bug 339816 - kwin crashes when opening qemu monitor
Summary: kwin crashes when opening qemu monitor
Status: RESOLVED UNMAINTAINED
Alias: None
Product: kwin
Classification: Plasma
Component: core (other bugs)
Version First Reported In: 4.11.11
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: KWin default assignee
URL: https://bugreports.qt-project.org/bro...
Keywords:
Depends on:
Blocks:
 
Reported: 2014-10-09 13:25 UTC by Jiri Slaby
Modified: 2016-09-02 12:18 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jiri Slaby 2014-10-09 13:25:16 UTC
qemu tries to create a big window or something:
2046        QT_THROW(std::bad_alloc());
(gdb) where
#0  qBadAlloc () at global/qglobal.cpp:2046
#1  0x00007ffff0d3e6bd in QX11PixmapData::toImage (this=0x1f1c400, rect=...) at image/qpixmap_x11.cpp:1555
#2  0x00007ffff0d38d1a in QX11PixmapData::toImage (this=<optimized out>) at image/qpixmap_x11.cpp:1584
#3  0x00007ffff0d263d8 in QPixmap::toImage (this=0x22340a8) at image/qpixmap.cpp:521
#4  0x00007ffff642b16b in KImageCache::insertPixmap(QString const&, QPixmap const&) () from /usr/lib64/libkdeui.so.5
#5  0x00007ffff5e3c58f in ?? () from /usr/lib64/libplasma.so.3
#6  0x00007ffff5e43b59 in ?? () from /usr/lib64/libplasma.so.3
#7  0x00007ffff1af31fa in QMetaObject::activate (sender=0xaa7370, m=<optimized out>, local_signal_index=<optimized out>, argv=0x0) at kernel/qobject.cpp:3576
#8  0x00007ffff1af73b1 in QObject::event (this=0xaa7370, e=<optimized out>) at kernel/qobject.cpp:1193
#9  0x00007ffff0c5b76c in QApplicationPrivate::notify_helper (this=this@entry=0x6963b0, receiver=receiver@entry=0xaa7370, e=e@entry=0x7fffffffdff0)
    at kernel/qapplication.cpp:4565
#10 0x00007ffff0c61cad in QApplication::notify (this=0x7fffffffe4c0, receiver=0xaa7370, e=0x7fffffffdff0) at kernel/qapplication.cpp:4351
#11 0x00007ffff63cbc3a in KApplication::notify(QObject*, QEvent*) () from /usr/lib64/libkdeui.so.5
#12 0x00007ffff1adf2ad in QCoreApplication::notifyInternal (this=0x7fffffffe4c0, receiver=0xaa7370, event=0x7fffffffdff0) at kernel/qcoreapplication.cpp:953
#13 0x00007ffff1b0ec8c in sendEvent (event=<optimized out>, receiver=<optimized out>) at kernel/qcoreapplication.h:231
#14 QTimerInfoList::activateTimers (this=0x696e78) at kernel/qeventdispatcher_unix.cpp:636
#15 0x00007ffff1b0f350 in QEventDispatcherUNIX::activateTimers (this=this@entry=0x605410) at kernel/qeventdispatcher_unix.cpp:893
#16 0x00007ffff1b0fce8 in QEventDispatcherUNIX::processEvents (this=this@entry=0x605410, flags=...) at kernel/qeventdispatcher_unix.cpp:963
#17 0x00007ffff0cf8f96 in QEventDispatcherX11::processEvents (this=0x605410, flags=...) at kernel/qeventdispatcher_x11.cpp:152
#18 0x00007ffff1adde6f in QEventLoop::processEvents (this=this@entry=0x7fffffffe330, flags=...) at kernel/qeventloop.cpp:149
#19 0x00007ffff1ade165 in QEventLoop::exec (this=this@entry=0x7fffffffe330, flags=...) at kernel/qeventloop.cpp:204
#20 0x00007ffff1ae35b9 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1225
#21 0x00007ffff0c59f3c in QApplication::exec () at kernel/qapplication.cpp:3823
#22 0x00007ffff7ab87a3 in kdemain (argc=2, argv=0x7fffffffe608) at /usr/src/debug/kde-workspace-4.11.12/kwin/main.cpp:597
#23 0x00007ffff76b3b05 in __libc_start_main (main=0x400730 <main(int, char**)>, argc=2, argv=0x7fffffffe608, init=<optimized out>, fini=<optimized out>, 
    rtld_fini=<optimized out>, stack_end=0x7fffffffe5f8) at libc-start.c:285
#24 0x000000000040075e in _start () at ../sysdeps/x86_64/start.S:122
(gdb) up
#1  0x00007ffff0d3e6bd in QX11PixmapData::toImage (this=0x1f1c400, rect=...) at image/qpixmap_x11.cpp:1555
1555        Q_CHECK_PTR(xiWrapper.xi);
(gdb) l
1550    {
1551        QXImageWrapper xiWrapper;
1552        xiWrapper.xi = XGetImage(X11->display, hd, rect.x(), rect.y(), rect.width(), rect.height(),
1553                                 AllPlanes, (depth() == 1) ? XYPixmap : ZPixmap);
1554    
1555        Q_CHECK_PTR(xiWrapper.xi);
1556        if (!xiWrapper.xi)
1557            return QImage();
1558    
1559        if (!x11_mask && canTakeQImageFromXImage(xiWrapper))
(gdb) p rect
$1 = (const QRect &) @0x7fffffffd950: {x1 = 0, y1 = 0, x2 = 797, y2 = 33196}


Is this qt or kde bug?
Comment 1 Jiri Slaby 2014-10-09 13:28:42 UTC
Packages on my system:

kdebase4-artwork-4.14.1-1.2.noarch
kdebase4-libkonq-4.14.1-1.2.x86_64
kdebase4-openSUSE-13.2-6.7.x86_64
kdebase4-runtime-4.14.1-1.2.x86_64
kdebase4-runtime-branding-openSUSE-13.2-6.7.x86_64
kdebase4-session-4.12-4.1.noarch
kdebase4-wallpapers-4.14.1-1.2.noarch
kdebase4-workspace-4.11.12-1.2.x86_64
kdebase4-workspace-addons-4.11.12-1.2.x86_64
kdebase4-workspace-branding-openSUSE-13.2-6.7.x86_64
kdebase4-workspace-debugsource-4.11.12-1.2.x86_64
kdebase4-workspace-ksysguardd-4.11.12-1.2.x86_64
kdebase4-workspace-liboxygenstyle-4.11.12-1.2.x86_64
kdebase4-workspace-libs-4.11.12-1.2.x86_64
kdebase4-workspace-plasma-calendar-4.11.12-1.2.x86_64
kde-gtk-config-2.2.1-5.1.x86_64
kde-gtk-config-lang-2.2.1-5.1.noarch
kdelibs3-3.5.10-84.1.x86_64
kdelibs3-default-style-3.5.10-84.1.x86_64
kdelibs4-4.14.1-1.2.x86_64
kdelibs4-branding-openSUSE-13.2-6.15.noarch
kdelibs4-core-4.14.1-1.2.x86_64
kdenlive-0.9.8-14.2.x86_64
kdepimlibs4-4.14.1-1.2.x86_64
kdepim4-runtime-4.14.1-1.2.x86_64
kde-susetranslations-12.1-21.1.noarch
kde4-filesystem-4.14-3.1.x86_64
kde4-kgreeter-plugins-4.11.12-1.2.x86_64
kde4-l10n-cs-4.14.0-3.2.noarch
kde4-l10n-en_GB-data-4.14.0-3.2.noarch
kde4-l10n-en_GB-doc-4.14.0-3.2.noarch
libkdecore4-4.14.1-1.2.x86_64
libkdecore4-debuginfo-4.14.1-1.2.x86_64
libkdepimlibs4-4.14.1-1.2.x86_64
libkde4-4.14.1-1.2.x86_64
liblockdev1-1.0.3_git201003141408-29.1.x86_64
liblockdev1-32bit-1.0.3_git201003141408-29.1.x86_64
libqtweetlib1_0-0.5-10.1.x86_64
libqt4-4.8.6-7.2.x86_64
libqt4-debuginfo-4.8.6-7.2.x86_64
libqt4-debugsource-4.8.6-7.2.x86_64
libqt4-linguist-4.8.6-7.2.x86_64
libqt4-qt3support-4.8.6-7.2.x86_64
libqt4-sql-4.8.6-7.2.x86_64
libqt4-sql-mysql-4.8.6-7.2.x86_64
libqt4-sql-sqlite-4.8.6-7.2.x86_64
libqt4-sql-32bit-4.8.6-7.2.x86_64
libqt4-x11-4.8.6-7.2.x86_64
libqt4-x11-debuginfo-4.8.6-7.2.x86_64
libqt4-x11-32bit-4.8.6-7.2.x86_64
libqt4-32bit-4.8.6-7.2.x86_64
Comment 2 Martin Flöser 2014-10-09 13:31:57 UTC
The crash is in Qt, so it's a Qt bug.
Comment 3 Jiri Slaby 2014-10-09 13:35:20 UTC
dammit.

https://bugreports.qt-project.org/browse/QTBUG-41857
Comment 4 Thomas Lübking 2014-10-09 14:36:31 UTC
It's not exactly a bug in Qt either:
> $1 = (const QRect &) @0x7fffffffd950: {x1 = 0, y1 = 0, x2 = 797, y2 = 33196}

the window causes the allocation of a 100MB image in plasma (aurorae decoration, I assume) alone (plus whatnot is required else for such giant window)

The "bug" is in QEmu for creating a window of that size (causing this ressource allocation) for probably no actual reason.

==> You should be able to work around that with a Window rule.

1st, create a blind window rule ("kcmshell4 kwinrules", simply skip any detection) to force the maximum window size to something reasonable (ie. eg. not much beyond your screen resolution) - you'll get a warning for creating a blind rule, but that's ok.

2nd, open that particular client

3rd, add a more finegrained ("special window rule") to force down the maximum size of the particular client

4th, remove the blind rule.

5th, profit ;-)
Comment 5 Jiri Slaby 2014-10-10 10:40:28 UTC
vte package update causes this. The monitor should not be that huge, of course.

Anyway, why is there Q_CHECK_PTR(xiWrapper.xi)? The NULL is handled fine the line below, so it makes sense to remove the CHECK for me. What do you think?
Comment 6 Thomas Lübking 2014-10-10 11:46:01 UTC
Q_CHECK_PTR only aborts in builds w/o the QT_NO_EXCEPTIONS flag.
Otherwise it yells a warning in builds w/o QT_NO_DEBUG set and otherwise does nothing.

The following nullptr handling is required.

I'm actually a bit surprised that KWin is build w/ exceptions enabled - Qt isn't exception safe and afair we don't make use of it either.

Downstream thing?
Comment 7 Thomas Lübking 2014-10-10 11:48:44 UTC
PS: this btw. somehow implies you're using the native graphicssystem along the Aurorae decoration?
Raster don't - raster should work better. (QML/QGraphicsScene doesn't like the native graphicssystem)
Comment 8 Jiri Slaby 2014-10-17 15:47:39 UTC
(In reply to Thomas Lübking from comment #6)
> Downstream thing?

Perhaps, what should I report exactly, since I am confused by the lines you wrote. I.e. what flag where should suse turn off/on?

(In reply to Thomas Lübking from comment #7)
> PS: this btw. somehow implies you're using the native graphicssystem along
> the Aurorae decoration?
> Raster don't - raster should work better. (QML/QGraphicsScene doesn't like
> the native graphicssystem)

What do I know :)? How can I check and fix?
Comment 9 Thomas Lübking 2014-10-17 17:31:51 UTC
(In reply to Jiri Slaby from comment #8)
> Perhaps, what should I report exactly, since I am confused by the lines you
> wrote. I.e. what flag where should suse turn off/on?

It's not necessarily a bug, but you can ask "Does SuSE actually undefine QT_NO_EXCEPTIONS for KWin builds and if so: why?"

> What do I know :)? How can I check and fix?
run: "kcmshell4 kwincompositing" and in the 3rd tab ("Advanced") set the graphicssystem to "raster" (KWin will restart on applying the setting, that's normal - graphicssystem cannot be changed online)
Comment 10 Martin Flöser 2016-09-02 12:18:06 UTC
Thank you for reporting this bug and helping us to make KDE software better. Unfortunately by now the version is no longer supported and the code changed a lot with KWin 5 and the underlying libraries like Qt 5. The code paths we see in the backtrace are not present at all in the current version.