D8152: [platforms/drm] Use a shared pointer for gbm_surface

Martin Flöser noreply at phabricator.kde.org
Thu Oct 5 17:09:56 UTC 2017


graesslin created this revision.
graesslin added reviewers: KWin, Plasma, subdiff.
Restricted Application added a project: KWin.
Restricted Application added subscribers: kwin, plasma-devel.

REVISION 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

REPOSITORY
  R108 KWin

BRANCH
  shared-gbm-surface-5.11

REVISION DETAIL
  https://phabricator.kde.org/D8152

AFFECTED FILES
  plugins/platforms/drm/CMakeLists.txt
  plugins/platforms/drm/drm_backend.cpp
  plugins/platforms/drm/drm_backend.h
  plugins/platforms/drm/drm_buffer_gbm.cpp
  plugins/platforms/drm/drm_buffer_gbm.h
  plugins/platforms/drm/egl_gbm_backend.cpp
  plugins/platforms/drm/egl_gbm_backend.h
  plugins/platforms/drm/gbm_surface.cpp
  plugins/platforms/drm/gbm_surface.h

To: graesslin, #kwin, #plasma, subdiff
Cc: plasma-devel, kwin, bwowk, ZrenBot, progwolff, lesliezhai, ali-mohamed, hardening, jensreuterberg, abetts, sebas, apol, mart
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20171005/402168b5/attachment.html>


More information about the Plasma-devel mailing list