[platforms/drm] Use a shared pointer for gbm_surface
ClosedPublic

Authored by graesslin on Oct 5 2017, 5:05 PM.

Details

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

Diff Detail

Repository
R108 KWin
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.
graesslin created this revision.Oct 5 2017, 5:05 PM
Restricted Application added a project: KWin. · View Herald TranscriptOct 5 2017, 5:05 PM
Restricted Application added subscribers: kwin, plasma-devel. · View Herald Transcript

I have no idea why git think I copied from drm_buffer_gbm.h|cpp. I created the files from scratch.

FIXED-IN: 5.11.0

I'm afraid it won't be. Tag was today.


Patch makes, sense potentially makes that GBM sharing patch cleaner too..

davidedmundson accepted this revision.Oct 5 2017, 6:27 PM
This revision is now accepted and ready to land.Oct 5 2017, 6:27 PM
graesslin updated this revision to Diff 20375.Oct 5 2017, 7:33 PM

Added test case for new class

Restricted Application edited projects, added Plasma; removed KWin. · View Herald TranscriptOct 5 2017, 7:33 PM

FIXED-IN: 5.11.0

I'm afraid it won't be. Tag was today.

Yeah, I already noticed. Basically I arc diffed, opened up my mails and saw that it was tagged.

This revision was automatically updated to reflect the committed changes.