Bug 400788 - Changing Vsync method crashes the compositor
Summary: Changing Vsync method crashes the compositor
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: wayland-generic (other bugs)
Version First Reported In: unspecified
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Vlad Zahorodnii
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-11-07 09:29 UTC by tromzy
Modified: 2018-12-02 18:00 UTC (History)
1 user (show)

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


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description tromzy 2018-11-07 09:29:25 UTC
On Wayland, Kwin crashes everytime I try to change the Vsync method setting in KCM. It does not crash immediately, but after 5 seconds or so.

STEPS TO REPRODUCE
1. Start a Plasma Wayland session
2. Go to the Compositor KCM module and change Vsync setting
3. Get kicked back to SDDM

OBSERVED RESULT
Get kicked back to SDDM

EXPECTED RESULT
DON'T get kicked back to SDDM !

SOFTWARE VERSIONS
(available in About System)
KDE Plasma Version: 5.14.3
KDE Frameworks Version: 5.51.0
Qt Version: 5.11.2

ADDITIONAL INFORMATION
Archlinux, Intel modesetting
Comment 1 Vlad Zahorodnii 2018-11-07 09:38:42 UTC
Please provide backtrace of the crash.
Comment 2 tromzy 2018-11-07 09:39:46 UTC
How do I do that on Archlinux ?
Comment 3 Vlad Zahorodnii 2018-11-07 09:59:55 UTC
First of all, you have to re-package kwin so it has debug symbols. See https://wiki.archlinux.org/index.php/Debug_-_Getting_Traces#CMAKE_.28KDE.29_applications

* sudo pacman -S asp
* asp export kwin
* cd kwin
  Adjust PKGBUILD accordingly to the wiki page
* makepkg -i

Then follow https://community.kde.org/KWin/Debugging, e.g.
* ssh from another machine to your computer

* gdb --pid `pidof kwin_wayland`
  (gdb) continue

* do something to crash kwin

* dump the backtrace
  (gdb) bt

when you submitted the backtrace, install kwin from the extra repo:
* sudo pacman -S extra/kwin
Comment 4 Bug Janitor Service 2018-11-22 04:46:09 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 5 Patrick Silva 2018-11-30 10:49:48 UTC
Currently any change in compositor kcm is crashing Wayland session.
Comment 6 Vlad Zahorodnii 2018-11-30 10:59:39 UTC
(In reply to Patrick Silva from comment #5)
> Currently any change in compositor kcm is crashing Wayland session.

Hmm, kwin_wayland doesn't crash for me.

Could you please post the backtrace?
Comment 7 Patrick Silva 2018-11-30 12:11:36 UTC
backtrace generated on neon dev unstable

Thread 1 "kwin_wayland" received signal SIGSEGV, Segmentation fault.
0x000055b8ce7bcd90 in ?? ()
(gdb) thread apply all bt

Thread 9 (Thread 1068.1106):
#0  0x00007fc5efdf59f3 in futex_wait_cancelable (private=<optimized out>, expected=0, 
    futex_word=0x7fc5ed81efb8 <QTWTF::pageheap_memory+57592>)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  __pthread_cond_wait_common (abstime=0x0, 
    mutex=0x7fc5ed81ef68 <QTWTF::pageheap_memory+57512>, 
    cond=0x7fc5ed81ef90 <QTWTF::pageheap_memory+57552>) at pthread_cond_wait.c:502
#2  __pthread_cond_wait (cond=cond@entry=0x7fc5ed81ef90 <QTWTF::pageheap_memory+57552>, 
    mutex=mutex@entry=0x7fc5ed81ef68 <QTWTF::pageheap_memory+57512>)
    at pthread_cond_wait.c:655
#3  0x00007fc5ed529954 in QTWTF::TCMalloc_PageHeap::scavengerThread (
    this=0x7fc5ed810ec0 <QTWTF::pageheap_memory>)
    at ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastMalloc.cpp:2359
#4  0x00007fc5ed529999 in QTWTF::TCMalloc_PageHeap::runScavengerThread (
    context=<optimized out>)
    at ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastMalloc.cpp:1464
#5  0x00007fc5efdef6db in start_thread (arg=0x7fc5ad575700) at pthread_create.c:463
#6  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
---Type <return> to continue, or q <return> to quit---

Thread 8 (Thread 1068.1104):
#0  0x00007fc5efdf59f3 in futex_wait_cancelable (private=<optimized out>, expected=0, 
    futex_word=0x55b8ce1825d0) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  __pthread_cond_wait_common (abstime=0x0, mutex=0x55b8ce182580, cond=0x55b8ce1825a8)
    at pthread_cond_wait.c:502
#2  __pthread_cond_wait (cond=cond@entry=0x55b8ce1825a8, mutex=mutex@entry=0x55b8ce182580)
    at pthread_cond_wait.c:655
#3  0x00007fc5ee7d094b in QWaitConditionPrivate::wait (time=18446744073709551615, 
    this=0x55b8ce182580) at thread/qwaitcondition_unix.cpp:143
#4  QWaitCondition::wait (this=this@entry=0x55b8ce1823c0, mutex=mutex@entry=0x55b8ce1823b8, 
    time=time@entry=18446744073709551615) at thread/qwaitcondition_unix.cpp:215
#5  0x00007fc5aed8522b in FileInfoThread::run (this=0x55b8ce1823a8)
    at fileinfothread.cpp:227
#6  0x00007fc5ee7cfadb in QThreadPrivate::start (arg=0x55b8ce1823a8)
    at thread/qthread_unix.cpp:367
#7  0x00007fc5efdef6db in start_thread (arg=0x7fc5ae577700) at pthread_create.c:463
#8  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

---Type <return> to continue, or q <return> to quit---
Thread 7 (Thread 1068.1103):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007fc5ee7c3594 in QtLinuxFutex::_q_futex (val3=0, addr2=0x0, val2=0, val=<optimized out>, op=0, addr=<optimized out>)
    at thread/qfutex_p.h:92
#2  QtLinuxFutex::futexWait<QBasicAtomicInteger<unsigned int> > (expectedValue=<optimized out>, futex=...) at thread/qfutex_p.h:107
#3  futexSemaphoreTryAcquire_loop<false> (timeout=-1, nn=8589934593, curValue=<optimized out>, u=...) at thread/qsemaphore.cpp:221
#4  futexSemaphoreTryAcquire<false> (timeout=-1, n=n@entry=1, u=...) at thread/qsemaphore.cpp:264
#5  QSemaphore::acquire (this=this@entry=0x55b8ce2476a8, n=n@entry=1) at thread/qsemaphore.cpp:328
#6  0x00007fc5d67078fb in QtVirtualKeyboard::HunspellWorker::run (this=0x55b8ce247690) at hunspellworker.cpp:293
#7  0x00007fc5ee7cfadb in QThreadPrivate::start (arg=0x55b8ce247690) at thread/qthread_unix.cpp:367
#8  0x00007fc5efdef6db in start_thread (arg=0x7fc5aed78700) at pthread_create.c:463
#9  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 6 (Thread 1068.1102):
#0  0x00007fc5ede92bf9 in __GI___poll (fds=0x7fc5b0004660, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fc5e4e1f539 in ?? () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fc5e4e1f64c in g_main_context_iteration () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fc5ee9f502f in QEventDispatcherGlib::processEvents (this=0x7fc5b0000b20, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#4  0x00007fc5ee99930a in QEventLoop::exec (this=this@entry=0x7fc5b8a94d40, flags=..., flags@entry=...) at kernel/qeventloop.cpp:214
#5  0x00007fc5ee7c4bba in QThread::exec (this=this@entry=0x55b8ce11e3f0) at thread/qthread.cpp:525
#6  0x00007fc5e8f1d4f5 in QQmlThreadPrivate::run (this=0x55b8ce11e3f0) at qml/ftw/qqmlthread.cpp:148
#7  0x00007fc5ee7cfadb in QThreadPrivate::start (arg=0x55b8ce11e3f0) at thread/qthread_unix.cpp:367
#8  0x00007fc5efdef6db in start_thread (arg=0x7fc5b8a95700) at pthread_create.c:463
#9  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 5 (Thread 1068.1101):
#0  0x00007fc5ede92bf9 in __GI___poll (fds=0x7fc5b4003ce0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fc5e4e1f539 in ?? () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fc5e4e1f64c in g_main_context_iteration () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fc5ee9f502f in QEventDispatcherGlib::processEvents (this=0x7fc5b4000b20, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#4  0x00007fc5ee99930a in QEventLoop::exec (this=this@entry=0x7fc5c2738d40, flags=..., flags@entry=...) at kernel/qeventloop.cpp:214
#5  0x00007fc5ee7c4bba in QThread::exec (this=this@entry=0x55b8cdfad900) at thread/qthread.cpp:525
#6  0x00007fc5e8f1d4f5 in QQmlThreadPrivate::run (this=0x55b8cdfad900) at qml/ftw/qqmlthread.cpp:148
---Type <return> to continue, or q <return> to quit---
#7  0x00007fc5ee7cfadb in QThreadPrivate::start (arg=0x55b8cdfad900) at thread/qthread_unix.cpp:367
#8  0x00007fc5efdef6db in start_thread (arg=0x7fc5c2739700) at pthread_create.c:463
#9  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 4 (Thread 1068.1071):
#0  0x00007fc5ede92bf9 in __GI___poll (fds=0x7fc5c40046c0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fc5e4e1f539 in ?? () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fc5e4e1f64c in g_main_context_iteration () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fc5ee9f502f in QEventDispatcherGlib::processEvents (this=0x7fc5c4000b20, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#4  0x00007fc5ee99930a in QEventLoop::exec (this=this@entry=0x7fc5cfffed60, flags=..., flags@entry=...) at kernel/qeventloop.cpp:214
#5  0x00007fc5ee7c4bba in QThread::exec (this=<optimized out>) at thread/qthread.cpp:525
#6  0x00007fc5ee7cfadb in QThreadPrivate::start (arg=0x55b8cd65a440) at thread/qthread_unix.cpp:367
#7  0x00007fc5efdef6db in start_thread (arg=0x7fc5cffff700) at pthread_create.c:463
#8  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 3 (Thread 1068.1070):
#0  0x00007fc5ede92bf9 in __GI___poll (fds=0x7fc5c8003ce0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fc5e4e1f539 in ?? () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fc5e4e1f64c in g_main_context_iteration () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fc5ee9f502f in QEventDispatcherGlib::processEvents (this=0x7fc5c8000b20, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#4  0x00007fc5ee99930a in QEventLoop::exec (this=this@entry=0x7fc5d4f4bd60, flags=..., flags@entry=...) at kernel/qeventloop.cpp:214
#5  0x00007fc5ee7c4bba in QThread::exec (this=<optimized out>) at thread/qthread.cpp:525
#6  0x00007fc5ee7cfadb in QThreadPrivate::start (arg=0x55b8cd65a130) at thread/qthread_unix.cpp:367
#7  0x00007fc5efdef6db in start_thread (arg=0x7fc5d4f4c700) at pthread_create.c:463
#8  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 2 (Thread 1068.1069):
#0  0x00007fc5ede92bf9 in __GI___poll (fds=0x7fc5d000c550, nfds=6, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fc5e4e1f539 in ?? () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fc5e4e1f64c in g_main_context_iteration () from target:/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fc5ee9f502f in QEventDispatcherGlib::processEvents (this=0x7fc5d0000b20, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#4  0x00007fc5ee99930a in QEventLoop::exec (this=this@entry=0x7fc5d5da3d30, flags=..., flags@entry=...) at kernel/qeventloop.cpp:214
#5  0x00007fc5ee7c4bba in QThread::exec (
---Type <return> to continue, or q <return> to quit---
    this=this@entry=0x7fc5efde6d60 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at thread/qthread.cpp:525
#6  0x00007fc5efb6ee45 in QDBusConnectionManager::run (
    this=0x7fc5efde6d60 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at qdbusconnection.cpp:178
#7  0x00007fc5ee7cfadb in QThreadPrivate::start (
    arg=0x7fc5efde6d60 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at thread/qthread_unix.cpp:367
#8  0x00007fc5efdef6db in start_thread (arg=0x7fc5d5da4700) at pthread_create.c:463
#9  0x00007fc5ede9f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 1068.1068):
#0  0x000055b8ce7bcd90 in ?? ()
#1  0x00007fc5f0985142 in QtSharedPointer::ExternalRefCountData::destroy (this=0x55b8ce356b80)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qsharedpointer_impl.h:157
#2  QSharedPointer<KWin::KeepAliveLock>::deref (dd=0x55b8ce356b80)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qsharedpointer_impl.h:465
#3  QSharedPointer<KWin::KeepAliveLock>::deref (this=0x55b8ce4213f8)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qsharedpointer_impl.h:460
#4  QSharedPointer<KWin::KeepAliveLock>::~QSharedPointer (this=0x55b8ce4213f8, __in_chrg=<optimized out>)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qsharedpointer_impl.h:315
#5  KWin::AniData::~AniData (this=0x55b8ce4213a0, __in_chrg=<optimized out>) at ./libkwineffects/anidata_p.h:74
#6  QList<KWin::AniData>::node_destruct (this=<optimized out>, to=0x55b8ce7bd380, from=<optimized out>)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:494
#7  QList<KWin::AniData>::dealloc (data=0x55b8ce7bd370, this=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:865
#8  0x00007fc5f098abc7 in QPair<QList<KWin::AniData>, QRect>::~QPair (this=<optimized out>, __in_chrg=<optimized out>)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qpair.h:49
#9  QMapNodeBase::callDestructorIfNecessary<QPair<QList<KWin::AniData>, QRect> > (t=...)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:103
#10 QMapNode<KWin::EffectWindow*, QPair<QList<KWin::AniData>, QRect> >::destroySubTree (this=<optimized out>)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:128
#11 QMapData<KWin::EffectWindow*, QPair<QList<KWin::AniData>, QRect> >::destroy (this=0x55b8ce701230)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:248
#12 0x00007fc5f0987671 in QMap<KWin::EffectWindow*, QPair<QList<KWin::AniData>, QRect> >::~QMap (this=0x55b8ce65a190, 
    __in_chrg=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:339
#13 KWin::AnimationEffectPrivate::~AnimationEffectPrivate (this=0x55b8ce65a190, __in_chrg=<optimized out>)
---Type <return> to continue, or q <return> to quit---
    at ./libkwineffects/kwinanimationeffect.cpp:40
#14 KWin::AnimationEffect::~AnimationEffect (this=0x55b8ce45f630, __in_chrg=<optimized out>)
    at ./libkwineffects/kwinanimationeffect.cpp:72
#15 0x00007fc5f0f87469 in KWin::ScriptedEffect::~ScriptedEffect (this=0x55b8ce45f630, __in_chrg=<optimized out>)
    at ./scripting/scriptedeffect.cpp:609
#16 0x00007fc5f0f47c72 in KWin::EffectsHandlerImpl::unloadAllEffects (this=this@entry=0x55b8ce428a10) at ./effects.cpp:288
#17 0x00007fc5f0f47d37 in KWin::EffectsHandlerImpl::~EffectsHandlerImpl (this=0x55b8ce428a10, __in_chrg=<optimized out>)
    at ./effects.cpp:271
#18 0x00007fc5f0f47e29 in KWin::EffectsHandlerImpl::~EffectsHandlerImpl (this=0x55b8ce428a10, __in_chrg=<optimized out>)
    at ./effects.cpp:272
#19 0x00007fc5f0f2940f in KWin::Compositor::finish (this=0x55b8cd6ed550) at ./composite.cpp:406
#20 0x00007fc5f0f298ad in KWin::Compositor::slotReinitialize (this=0x55b8cd6ed550) at ./composite.cpp:502
#21 0x00007fc5f101cdd3 in KWin::Compositor::qt_static_metacall (_a=0x7ffd4c7f9940, _id=7, _c=QMetaObject::InvokeMetaMethod, 
    _o=0x55b8cd6ed550) at ./obj-x86_64-linux-gnu/kwin_autogen/EWIEGA46WW/moc_composite.cpp:314
#22 KWin::Compositor::qt_metacall (this=0x55b8cd6ed550, _c=QMetaObject::InvokeMetaMethod, _id=7, _a=0x7ffd4c7f9940)
    at ./obj-x86_64-linux-gnu/kwin_autogen/EWIEGA46WW/moc_composite.cpp:315
#23 0x00007fc5efb79f58 in QDBusConnectionPrivate::deliverCall (this=<optimized out>, object=<optimized out>, msg=..., metaTypes=..., 
    slotIdx=<optimized out>) at qdbusintegrator.cpp:991
#24 0x00007fc5ee9cabe2 in QObject::event (this=0x55b8cd6ed550, e=<optimized out>) at kernel/qobject.cpp:1251
#25 0x00007fc5eef80e1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
   from target:/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#26 0x00007fc5eef883ef in QApplication::notify(QObject*, QEvent*) () from target:/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#27 0x00007fc5ee99afe8 in QCoreApplication::notifyInternal2 (receiver=0x55b8cd6ed550, event=event@entry=0x7fc5d0031380)
    at kernel/qcoreapplication.cpp:1048
#28 0x00007fc5ee99db2d in QCoreApplication::sendEvent (event=0x7fc5d0031380, receiver=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:234
#29 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x55b8cd5ea420) at kernel/qcoreapplication.cpp:1745
#30 0x00007fc5ee9f2274 in QEventDispatcherUNIX::processEvents (this=0x55b8cd60f670, flags=...) at kernel/qeventdispatcher_unix.cpp:466
#31 0x00007fc5d8964fed in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from target:/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/KWinQpaPlugin.so
#32 0x00007fc5ee99930a in QEventLoop::exec (this=this@entry=0x7ffd4c7f9e60, flags=..., flags@entry=...) at kernel/qeventloop.cpp:214
#33 0x00007fc5ee9a24d0 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1336
#34 0x000055b8cc7a1907 in main (argc=<optimized out>, argv=<optimized out>) at ./main_wayland.cpp:816
Comment 8 Vlad Zahorodnii 2018-11-30 12:38:18 UTC
@Patrick Silva Could you please also post output of
Comment 9 Vlad Zahorodnii 2018-11-30 12:38:46 UTC
    qdbus org.kde.KWin /KWin supportInformation
Comment 10 Patrick Silva 2018-11-30 12:54:16 UTC
Version
=======
KWin version: 5.14.80
Qt Version: 5.11.2
Qt compile version: 5.11.2
XCB compile version: 1.13

Operation Mode: Xwayland

Build Options
=============
KWIN_BUILD_DECORATIONS: yes
KWIN_BUILD_TABBOX: yes
KWIN_BUILD_ACTIVITIES: yes
HAVE_DRM: yes
HAVE_GBM: yes
HAVE_X11_XCB: yes
HAVE_EPOXY_GLX: yes
HAVE_WAYLAND_EGL: yes

X11
===
Vendor: The X.Org Foundation
Vendor Release: 11906000
Protocol Version/Revision: 11/0
SHAPE: yes; Version: 0x11
RANDR: yes; Version: 0x14
DAMAGE: yes; Version: 0x11
Composite: yes; Version: 0x4
RENDER: yes; Version: 0xb
XFIXES: yes; Version: 0x50
SYNC: yes; Version: 0x31
GLX: yes; Version: 0x0

Decoration
==========
Plugin: org.kde.breeze
Theme: 
Blur: 0
onAllDesktopsAvailable: false
alphaChannelSupported: true
closeOnDoubleClickOnMenu: false
decorationButtonsLeft: 0, 2, 9
decorationButtonsRight: 6, 3, 4, 5
borderSize: 3
gridUnit: 10
font: Noto Sans,10,-1,0,50,0,0,0,0,0,Regular
smallSpacing: 2
largeSpacing: 10

Platform
==========
Name: DRM
Active: true
Atomic Mode Setting: true

Options
=======
focusPolicy: 0
nextFocusPrefersMouse: false
clickRaise: true
autoRaise: false
autoRaiseInterval: 0
delayFocusInterval: 0
shadeHover: false
shadeHoverInterval: 250
separateScreenFocus: false
placement: 4
focusPolicyIsReasonable: true
borderSnapZone: 10
windowSnapZone: 10
centerSnapZone: 0
snapOnlyWhenOverlapping: false
rollOverDesktops: true
focusStealingPreventionLevel: 1
legacyFullscreenSupport: false
operationTitlebarDblClick: 5000
operationMaxButtonLeftClick: 5000
operationMaxButtonMiddleClick: 5015
operationMaxButtonRightClick: 5014
commandActiveTitlebar1: 0
commandActiveTitlebar2: 30
commandActiveTitlebar3: 2
commandInactiveTitlebar1: 4
commandInactiveTitlebar2: 30
commandInactiveTitlebar3: 2
commandWindow1: 7
commandWindow2: 8
commandWindow3: 8
commandWindowWheel: 31
commandAll1: 10
commandAll2: 3
commandAll3: 14
keyCmdAllModKey: 16777251
showGeometryTip: false
condensedTitle: false
electricBorderMaximize: true
electricBorderTiling: true
electricBorderCornerRatio: 0.25
borderlessMaximizedWindows: false
killPingTimeout: 5000
hideUtilityWindowsForInactive: true
inactiveTabsSkipTaskbar: false
autogroupSimilarWindows: false
autogroupInForeground: true
compositingMode: 1
useCompositing: true
compositingInitialized: true
hiddenPreviews: 1
glSmoothScale: 2
xrenderSmoothScale: false
maxFpsInterval: 16666666
refreshRate: 0
vBlankTime: 6000000
glStrictBinding: false
glStrictBindingFollowsDriver: true
glCoreProfile: false
glPreferBufferSwap: 101
glPlatformInterface: 2
windowsBlockCompositing: true

Screen Edges
============
desktopSwitching: false
desktopSwitchingMovingClients: false
cursorPushBackDistance: 1x1
timeThreshold: 150
reActivateThreshold: 350
actionTopLeft: 0
actionTop: 0
actionTopRight: 0
actionRight: 0
actionBottomRight: 0
actionBottom: 0
actionBottomLeft: 0
actionLeft: 0

Screens
=======
Multi-Head: no
Active screen follows mouse:  no
Number of Screens: 1

Screen 0:
---------
Name: LP140WHU-TLB LVDS-1-desconhecido
Geometry: 0,0,1366x768
Scale: 1
Refresh Rate: 59.989


Compositing
===========
Compositing is active
Compositing Type: OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile 
OpenGL version string: 3.0 Mesa 18.0.5
OpenGL platform interface: EGL
OpenGL shading language version string: 1.30
Driver: Intel
GPU class: IvyBridge
OpenGL version: 3.0
GLSL version: 1.30
Mesa version: 18.0.5
Linux kernel version: 4.15
Direct rendering: Requires strict binding: no
GLSL shaders:  yes
Texture NPOT support:  yes
Virtual Machine:  no
OpenGL 2 Shaders are used
Painting blocks for vertical retrace:  no

Loaded Effects:
---------------
kwin4_effect_translucency
zoom
kwin4_effect_login
kwin4_effect_dialogparent
kwin4_effect_squash
kwin4_effect_maximize
kwin4_effect_frozenapp
kwin4_effect_logout
kwin4_effect_fadingpopups
kwin4_effect_morphingpopups
kwin4_effect_fade
kwin4_effect_windowaperture
slidingpopups
slide
screenshot
desktopgrid
colorpicker
presentwindows
highlightwindow
blur
contrast
startupfeedback
screenedge
kscreen

Currently Active Effects:
-------------------------
blur
contrast

Effect Settings:
----------------
kwin4_effect_translucency:
isActiveFullScreenEffect: false

zoom:
zoomFactor: 1.2
mousePointer: 0
mouseTracking: 0
enableFocusTracking: false
followFocus: true
focusDelay: 350
moveFactor: 20
targetZoom: 1

kwin4_effect_login:
isActiveFullScreenEffect: false

kwin4_effect_dialogparent:
isActiveFullScreenEffect: false

kwin4_effect_squash:
isActiveFullScreenEffect: false

kwin4_effect_maximize:
isActiveFullScreenEffect: false

kwin4_effect_frozenapp:
isActiveFullScreenEffect: false

kwin4_effect_logout:
isActiveFullScreenEffect: false

kwin4_effect_fadingpopups:
isActiveFullScreenEffect: false

kwin4_effect_morphingpopups:
isActiveFullScreenEffect: false

kwin4_effect_fade:
isActiveFullScreenEffect: false

kwin4_effect_windowaperture:
isActiveFullScreenEffect: false

slidingpopups:
slideInDuration: 150
slideOutDuration: 250

slide:
duration: 500
horizontalGap: 45
verticalGap: 20
slideDocks: false
slideBackground: true

screenshot:

desktopgrid:
zoomDuration: 300
border: 10
desktopNameAlignment: 0
layoutMode: 0
customLayoutRows: 2
usePresentWindows: true

colorpicker:

presentwindows:
layoutMode: 0
showCaptions: true
showIcons: true
doNotCloseWindows: false
ignoreMinimized: false
accuracy: 20
fillGaps: true
fadeDuration: 150
showPanel: false
leftButtonWindow: 1
rightButtonWindow: 2
middleButtonWindow: 0
leftButtonDesktop: 2
middleButtonDesktop: 0
rightButtonDesktop: 0

highlightwindow:

blur:

contrast:

startupfeedback:
type: 1

screenedge:

kscreen:
Comment 11 Vlad Zahorodnii 2018-11-30 13:18:17 UTC
Probably either FAding Popups or Fade effect causes the crash.

Could you please describe how to reproduce the crash? (I had no luck in reproducing the crash)
Comment 12 Patrick Silva 2018-11-30 13:29:14 UTC
open compositor kcm
change vsync setting
click "Ok" button
crash...
crash is NOT reproducible if I click "Apply" instead "Ok" button
Comment 13 Vlad Zahorodnii 2018-11-30 13:40:02 UTC
(In reply to Patrick Silva from comment #12)
> open compositor kcm
> change vsync setting
> click "Ok" button
> crash...

Thanks, I'll try to reproduce the crash by following these steps.
Comment 14 Vlad Zahorodnii 2018-11-30 16:39:38 UTC
Can confirm.
Comment 15 Vlad Zahorodnii 2018-11-30 18:46:01 UTC
Compositor doesn't let AnimationEffect to cleanup gracefully, so KeepAliveLock and PreviousWindowPixmapLock can have dangling pointers.

There are 2 potential ways to fix it:
* emit deletedRemoved in Compositor::finish;
* or, use QPointer in KeepAliveLock/PreviousWindowPixmapLock.
Comment 16 Martin Flöser 2018-12-01 06:55:13 UTC
Option 2 sounds cleaner to me
Comment 17 Vlad Zahorodnii 2018-12-01 13:32:46 UTC
(In reply to Martin Flöser from comment #16)
> Option 2 sounds cleaner to me

Okay then, I'll go with it. :-)
Comment 18 Vlad Zahorodnii 2018-12-01 22:46:41 UTC
Other 2 options:
* Do cleanup when aboutToFinishCompositing is emitted;
* Move https://github.com/KDE/kwin/blame/master/composite.cpp#L406-L407 up (so effect windows outlive effects).
Comment 19 Vlad Zahorodnii 2018-12-01 23:48:31 UTC
(In reply to Vlad Zagorodniy from comment #18)
> * Move https://github.com/KDE/kwin/blame/master/composite.cpp#L406-L407 up
> (so effect windows outlive effects).

No, that's not an option because opengl shadow needs effects ptr. So, I'll stick with the aboutToFinishCompositing signal.
Comment 20 Vlad Zahorodnii 2018-12-02 18:00:05 UTC
Git commit 295138145ca2cc0b8b9d637f6071298d356084d0 by Vlad Zagorodniy.
Committed on 02/12/2018 at 17:59.
Pushed by vladz into branch 'master'.

Make sure that effect windows outlive effects

Summary:
Compositing is suspended/finished in a very hard way fashion, effect
windows are destroyed without notifying effects about it.

AnimationEffect tries gracefully release deleted windows, but because
in some cases(like when suspending compositing) a deleted window can
be already destroyed, a segmentation fault can happen.

This change adjusts the order in which effect windows and effects are
destroyed, so AnimationEffect (and other effects) cannot access dangling
pointers.
FIXED-IN: 5.15.0

Reviewers: #kwin, graesslin

Reviewed By: #kwin, graesslin

Subscribers: graesslin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D17311

M  +1    -0    autotests/integration/CMakeLists.txt
A  +150  -0    autotests/integration/dont_crash_reinitialize_compositor.cpp     [License: GPL (v2)]
M  +7    -2    composite.cpp
M  +13   -0    effects.cpp
M  +9    -0    effects.h

https://commits.kde.org/kwin/295138145ca2cc0b8b9d637f6071298d356084d0