[PATCH v14 06/41] compositor-drm: Use drm_plane for scanout plane
Pekka Paalanen
ppaalanen at gmail.com
Wed Jan 17 07:37:17 UTC 2018
On Tue, 16 Jan 2018 15:42:25 +0000
Daniel Stone <daniel at fooishbar.org> wrote:
> Hi,
>
> On 16 January 2018 at 14:30, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> > On Wed, 20 Dec 2017 12:26:23 +0000
> > Daniel Stone <daniels at collabora.com> wrote:
> >> @@ -3355,6 +3398,19 @@ drm_output_init_egl(struct drm_output *output, struct drm_backend *b)
> >> static void
> >> drm_output_fini_egl(struct drm_output *output)
> >> {
> >> + struct drm_backend *b = to_drm_backend(output->base.compositor);
> >> +
> >> + /* Destroying the GBM surface will destroy all our GBM buffers,
> >> + * regardless of refcount. Ensure we destroy them here. */
> >
> > I suppose that happens inside eglDestroySurface().
>
> Inside gbm_surface_destroy(). This destroys every BO created for the
> surface.
It does not seem like that to me.
main/gbm.c:
GBM_EXPORT void
gbm_surface_destroy(struct gbm_surface *surf)
{
surf->gbm->surface_destroy(surf);
}
backends/dri/gbm_dri.c:
static void
gbm_dri_surface_destroy(struct gbm_surface *_surf)
{
struct gbm_dri_surface *surf = gbm_dri_surface(_surf);
free(surf->base.modifiers);
free(surf);
}
But when I looked into Mesa EGL, dri2_drm_destroy_surface() has a loop
to call gbm_bo_destroy() on all color buffers.
Anyway, doesn't really matter which one does it, as both are called.
>
> >> static void
> >> drm_output_fini_pixman(struct drm_output *output)
> >> {
> >> + struct drm_backend *b = to_drm_backend(output->base.compositor);
> >> unsigned int i;
> >>
> >> + /* Destroying the Pixman surface will destroy all our buffers,
> >> + * regardless of refcount. Ensure we destroy them here. */
> >
> > I think this is only half-true. The pixman_image_t does get destroyed,
> > but drm_fb is still refcounted and recount honoured it seems. Only
> > drm_output_render_pixman() uses the image, and I assume that won't
> > called anymore. drm_fb is the one that maintains the backing storage in
> > this case.
> >
> > Therefore this workaround here is not necessary for avoiding
> > use-after-free, but maybe we want this to ensure the drm_fb really does
> > get destroyed anyway?
> >
> > At most, the comment here could be adjusted.
>
> Yes, the wording is too imprecise, and I'm thinking of the
> pixman_image_t, which doesn't have a ref on the drm_fb. I'll try to
> think of some better wording.
Cool, but don't let it stop you from landing this. ;-)
Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180117/94c4594b/attachment.sig>
More information about the wayland-devel
mailing list