https://bugs.kde.org/show_bug.cgi?id=436500
Bug ID: 436500 Summary: Crash when opening then closing a display Product: kwin Version: git master Platform: Other OS: Linux Status: REPORTED Severity: normal Priority: NOR Component: wayland-generic Assignee: kwin-bugs-n...@kde.org Reporter: aleix...@kde.org Target Milestone: --- Here's a detailed valgrind backtrace that shows how certain egl pointers are cleaned up twice. ==15995== Invalid read of size 8 [162/1932] ==15995== at 0x11EE0B0F: ??? (in /usr/lib/libEGL_mesa.so.0.0.0) ==15995== by 0xEA60B25: KWin::GbmSurface::releaseBuffer(gbm_bo*) (devel/frameworks/kwin/src/plugins/platforms/drm/gbm_surface.cpp:41) ==15995== by 0xEA5F725: KWin::GbmBuffer::~GbmBuffer() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_buffer_gbm.cpp:53) ==15995== by 0xEA60028: KWin::DrmGbmBuffer::~DrmGbmBuffer() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_buffer_gbm.cpp:87) ==15995== by 0xEA5E835: QtSharedPointer::ExternalRefCountWithContiguousData<KWin::DrmGbmBuffer>::deleter(QtSharedPointer::ExternalRefCountData*) (devel/kde5/include/QtCore/qsharedpointer_impl.h:248) ==15995== by 0xEA1CE85: QtSharedPointer::ExternalRefCountData::destroy() (devel/kde5/include/QtCore/qsharedpointer_impl.h:149) ==15995== by 0xEA3673E: QSharedPointer<KWin::DrmBuffer>::deref(QtSharedPointer::ExternalRefCountData*) (devel/kde5/include/QtCore/qsharedpointer_impl.h:458) ==15995== by 0xEA366F8: QSharedPointer<KWin::DrmBuffer>::deref() (devel/kde5/include/QtCore/qsharedpointer_impl.h:453) ==15995== by 0xEA363F4: QSharedPointer<KWin::DrmBuffer>::~QSharedPointer() (devel/kde5/include/QtCore/qsharedpointer_impl.h:310) ==15995== by 0xEA362FE: QSharedPointer<KWin::DrmBuffer>::operator=(QSharedPointer<KWin::DrmBuffer> const&) (devel/kde5/include/QtCore/qsharedpointer_impl.h:333) ==15995== by 0xEA3DE95: KWin::DrmPlane::setCurrent(QSharedPointer<KWin::DrmBuffer> const&) (devel/frameworks/kwin/src/plugins/platforms/drm/drm_object_plane.h:81) ==15995== by 0xEA39379: KWin::DrmOutput::teardown() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_output.cpp:67) ==15995== by 0xEA48463: KWin::DrmGpu::removeOutput(KWin::DrmOutput*) (devel/frameworks/kwin/src/plugins/platforms/drm/drm_gpu.cpp:426) ==15995== by 0xEA496B8: KWin::DrmGpu::updateOutputs() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_gpu.cpp:305) ==15995== by 0xEA1DDC4: KWin::DrmBackend::updateOutputs() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:336) ==15995== by 0xEA1FA86: KWin::DrmBackend::handleUdevEvent() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:266) ==15995== by 0xEA28910: QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KWin::DrmBackend::*)()>::call(void (KWin::DrmBackend::*)(), KWin::DrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:152) ==15995== by 0xEA28877: void QtPrivate::FunctionPointer<void (KWin::DrmBackend::*)()>::call<QtPrivate::List<>, void>(void (KWin::DrmBackend::*)(), KWin::DrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:185) ==15995== by 0xEA287A4: QtPrivate::QSlotObject<void (KWin::DrmBackend::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (devel/kde5/include/QtCore/qobjectdefs_impl.h:418) ==15995== by 0x801D3D5: call (qobjectdefs_impl.h:398) ==15995== by 0x801D3D5: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3886) ==15995== by 0x802081E: QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (moc_qsocketnotifier.cpp:178) ==15995== by 0x802101A: QSocketNotifier::event(QEvent*) (qsocketnotifier.cpp:302) ==15995== by 0x6C8517E: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3632) ==15995== by 0x7FE6DF9: QCoreApplication::notifyInternal2(QObject*, QEvent*) (qcoreapplication.cpp:1064) ==15995== by 0x803B54A: QEventDispatcherUNIXPrivate::activateSocketNotifiers() (qeventdispatcher_unix.cpp:304) ==15995== by 0x803B9AA: QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventdispatcher_unix.cpp:511) ==15995== by 0x1C66DC: QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qunixeventdispatcher.cpp:63) ==15995== by 0x7FE57AA: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (qeventloop.cpp:232) ==15995== by 0x7FEDA2F: QCoreApplication::exec() (qcoreapplication.cpp:1375) ==15995== by 0x1953CF: main (devel/frameworks/kwin/src/main_wayland.cpp:726) ==15995== Address 0x1223ebb8 is 552 bytes inside a block of size 808 free'd ==15995== at 0x483F9AB: free (vg_replace_malloc.c:538) ==15995== by 0x11EE2AB1: ??? (in /usr/lib/libEGL_mesa.so.0.0.0) ==15995== by 0x11ECED99: ??? (in /usr/lib/libEGL_mesa.so.0.0.0) ==15995== by 0xEA546BA: KWin::EglGbmBackend::cleanupOutput(KWin::EglGbmBackend::Output&) (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:77) ==15995== by 0xEA56372: KWin::EglGbmBackend::removeOutput(KWin::DrmOutput*) (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:253) ==15995== by 0xEA543BB: QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<KWin::DrmOutput*>, void, void (KWin::AbstractEglDrmBackend::*)(KWin::DrmOutput*)>::call(void (KWin::AbstractEglDrmBackend::*)(KWin::DrmOutput*), KWin::AbstractEglDrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:152) ==15995== by 0xEA54317: void QtPrivate::FunctionPointer<void (KWin::AbstractEglDrmBackend::*)(KWin::DrmOutput*)>::call<QtPrivate::List<KWin::DrmOutput*>, void>(void (KWin::AbstractEglDrmBackend::*)(KWin::DrmOutput*), KWin::AbstractEglDrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:185) ==15995== by 0xEA54244: QtPrivate::QSlotObject<void (KWin::AbstractEglDrmBackend::*)(KWin::DrmOutput*), QtPrivate::List<KWin::DrmOutput*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (devel/kde5/include/QtCore/qobjectdefs_impl.h:418) ==15995== by 0x801D3D5: call (qobjectdefs_impl.h:398) ==15995== by 0x801D3D5: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3886) ==15995== by 0xEA1BBB5: KWin::DrmGpu::outputDisabled(KWin::DrmOutput*) (moc_drm_gpu.cpp:189) ==15995== by 0xEA1FEA9: KWin::DrmBackend::removeOutput(KWin::DrmOutput*) (devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:321) ==15995== by 0xEA2A3AB: QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<KWin::DrmOutput*>, void, void (KWin::DrmBackend::*)(KWin::DrmOutput*)>::call(void (KWin::DrmBackend::*)(KWin::DrmOutput*), KWin::DrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:152) ==15995== by 0xEA2A307: void QtPrivate::FunctionPointer<void (KWin::DrmBackend::*)(KWin::DrmOutput*)>::call<QtPrivate::List<KWin::DrmOutput*>, void>(void (KWin::DrmBackend::*)(KWin::DrmOutput*), KWin::DrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:185) ==15995== by 0xEA2A234: QtPrivate::QSlotObject<void (KWin::DrmBackend::*)(KWin::DrmOutput*), QtPrivate::List<KWin::DrmOutput*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (devel/kde5/include/QtCore/qobjectdefs_impl.h:418) ==15995== by 0x801D3D5: call (qobjectdefs_impl.h:398) ==15995== by 0x801D3D5: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3886) ==15995== by 0xEA1BAB5: KWin::DrmGpu::outputRemoved(KWin::DrmOutput*) (moc_drm_gpu.cpp:175) ==15995== by 0xEA4845A: KWin::DrmGpu::removeOutput(KWin::DrmOutput*) (devel/frameworks/kwin/src/plugins/platforms/drm/drm_gpu.cpp:425) ==15995== by 0xEA496B8: KWin::DrmGpu::updateOutputs() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_gpu.cpp:305) ==15995== by 0xEA1DDC4: KWin::DrmBackend::updateOutputs() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:336) ==15995== by 0xEA1FA86: KWin::DrmBackend::handleUdevEvent() (devel/frameworks/kwin/src/plugins/platforms/drm/drm_backend.cpp:266) ==15995== by 0xEA28910: QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KWin::DrmBackend::*)()>::call(void (KWin::DrmBackend::*)(), KWin::DrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:152) ==15995== by 0xEA28877: void QtPrivate::FunctionPointer<void (KWin::DrmBackend::*)()>::call<QtPrivate::List<>, void>(void (KWin::DrmBackend::*)(), KWin::DrmBackend*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:185) ==15995== by 0xEA287A4: QtPrivate::QSlotObject<void (KWin::DrmBackend::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (devel/kde5/include/QtCore/qobjectdefs_impl.h:418) ==15995== by 0x801D3D5: call (qobjectdefs_impl.h:398) ==15995== by 0x801D3D5: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3886) ==15995== by 0x802081E: QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (moc_qsocketnotifier.cpp:178) ==15995== by 0x802101A: QSocketNotifier::event(QEvent*) (qsocketnotifier.cpp:302) ==15995== by 0x6C8517E: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3632) ==15995== by 0x7FE6DF9: QCoreApplication::notifyInternal2(QObject*, QEvent*) (qcoreapplication.cpp:1064) ==15995== by 0x803B54A: QEventDispatcherUNIXPrivate::activateSocketNotifiers() (qeventdispatcher_unix.cpp:304) ==15995== by 0x803B9AA: QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventdispatcher_unix.cpp:511) ==15995== by 0x1C66DC: QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qunixeventdispatcher.cpp:63) ==15995== by 0x7FE57AA: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (qeventloop.cpp:232) ==15995== by 0x7FEDA2F: QCoreApplication::exec() (qcoreapplication.cpp:1375) ==15995== by 0x1953CF: main (devel/frameworks/kwin/src/main_wayland.cpp:726) ==15995== Block was alloc'd at ==15995== at 0x4840B65: calloc (vg_replace_malloc.c:760) ==15995== by 0x11EEC4CF: ??? (in /usr/lib/libEGL_mesa.so.0.0.0) ==15995== by 0x11ECDD34: ??? (in /usr/lib/libEGL_mesa.so.0.0.0) ==15995== by 0xEA5584C: KWin::EglGbmBackend::createEglSurface(QSharedPointer<KWin::GbmSurface>) const (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:168) ==15995== by 0xEA55B1E: KWin::EglGbmBackend::resetOutput(KWin::EglGbmBackend::Output&, KWin::DrmOutput*) (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:196) ==15995== by 0xEA55F7B: KWin::EglGbmBackend::addOutput(KWin::DrmOutput*) (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:216) ==15995== by 0xEA54FB4: KWin::EglGbmBackend::initRenderingContext() (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:153) ==15995== by 0xEA54E45: KWin::EglGbmBackend::init() (devel/frameworks/kwin/src/plugins/platforms/drm/egl_gbm_backend.cpp:130) ==15995== by 0xEA50D91: KWin::EglMultiBackend::init() (devel/frameworks/kwin/src/plugins/platforms/drm/egl_multi_backend.cpp:41) ==15995== by 0x11E66B2D: ??? (in /home/apol/devel/kde5/lib64/plugins/org.kde.kwin.scenes/KWinSceneOpenGL.so) ==15995== by 0x11E75FE2: ??? (in /home/apol/devel/kde5/lib64/plugins/org.kde.kwin.scenes/KWinSceneOpenGL.so) ==15995== by 0x4D12177: KWin::Compositor::setupStart() (devel/frameworks/kwin/src/composite.cpp:236) ==15995== by 0x4D140DB: KWin::WaylandCompositor::start() (devel/frameworks/kwin/src/composite.cpp:674) ==15995== by 0x4D19E20: QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KWin::Compositor::*)()>::call(void (KWin::Compositor::*)(), KWin::Compositor*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:152) ==15995== by 0x4D19D87: void QtPrivate::FunctionPointer<void (KWin::Compositor::*)()>::call<QtPrivate::List<>, void>(void (KWin::Compositor::*)(), KWin::Compositor*, void**) (devel/kde5/include/QtCore/qobjectdefs_impl.h:185) ==15995== by 0x4D19CB4: QtPrivate::QSlotObject<void (KWin::Compositor::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (devel/kde5/include/QtCore/qobjectdefs_impl.h:418) ==15995== by 0x8012E20: QObject::event(QEvent*) (qobject.cpp:1314) ==15995== by 0x6C8517E: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3632) ==15995== by 0x7FE6DF9: QCoreApplication::notifyInternal2(QObject*, QEvent*) (qcoreapplication.cpp:1064) ==15995== by 0x7FE9830: QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (qcoreapplication.cpp:1821) ==15995== by 0x803B6A9: QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventdispatcher_unix.cpp:468) ==15995== by 0x1C66DC: QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qunixeventdispatcher.cpp:63) ==15995== by 0x7FE57AA: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (qeventloop.cpp:232) ==15995== by 0x7FEDA2F: QCoreApplication::exec() (qcoreapplication.cpp:1375) ==15995== by 0x1953CF: main (devel/frameworks/kwin/src/main_wayland.cpp:726) ==15995== -- You are receiving this mail because: You are watching all bug changes.