kwin/plugins/platforms/drm
Martin Flöser 47343fb8f7 [platforms/drm] Use a shared pointer for gbm_surface
Summary:
The gbm_surface is owned by the EglGbmBackend, but it's not the only one
using it. The DrmSurfaceBuffer is also using it and needs it to destroy
the gbm_bo. Now this can become a problem in the following situation:

* a page flip is still pending
* the EglGbmBackend destroys the gbm_surface

-> when the page flip happens the DrmSurfaceBuffer will try to destroy
the gbm_bo and crash as the gbm_surface is no longer valid. This
situation can happen when switching screens or when switching compositing
backend (OpenGL 2 -> OpenGL 3).

To address this problem a class GbmSurface is added which wrapps the
gbm_surface pointer. The EglGbmBackend creates and holds a shared pointer
to the GbmSurface and passes that one to the DrmSurfaceBuffer. So when
cleaning up the gbm_surface only the shared pointer is reset and in case
the DrmSurfaceBuffer still needs it, it can access it without problems.

BUG: 385372
FIXED-IN: 5.11.0

Test Plan: Not yet

Reviewers: #kwin, #plasma, subdiff

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D8152
2017-10-05 21:32:46 +02:00
..
CMakeLists.txt [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
drm.json SVN_SILENT made messages (.desktop file) - always resolve ours 2017-08-30 08:05:15 +02:00
drm_backend.cpp [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
drm_backend.h [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
drm_buffer.cpp [DRM plugin] Reorganize DrmBuffer 2017-05-09 21:00:33 +02:00
drm_buffer.h [DRM plugin] Reorganize DrmBuffer 2017-05-09 21:00:33 +02:00
drm_buffer_gbm.cpp [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
drm_buffer_gbm.h [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
drm_inputeventfilter.cpp
drm_inputeventfilter.h
drm_object.cpp [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object.h [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object_connector.cpp [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object_connector.h [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object_crtc.cpp [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object_crtc.h [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object_plane.cpp [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_object_plane.h [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_output.cpp Restore cursors across multiple screens 2017-09-24 17:11:12 +01:00
drm_output.h [DRM plugin] Correct Atomic Mode Setting 2017-05-09 21:29:10 +02:00
drm_pointer.h
egl_gbm_backend.cpp [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
egl_gbm_backend.h [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
gbm_surface.cpp [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
gbm_surface.h [platforms/drm] Use a shared pointer for gbm_surface 2017-10-05 21:32:46 +02:00
logging.cpp
logging.h
scene_qpainter_drm_backend.cpp Add scaling to DRM backend 2017-03-29 20:53:22 +01:00
scene_qpainter_drm_backend.h Move QPainter compositor into plugin 2017-09-01 17:44:49 +02:00
screens_drm.cpp Add scaling to DRM backend 2017-03-29 20:53:22 +01:00
screens_drm.h Add scaling to DRM backend 2017-03-29 20:53:22 +01:00