Otherwise references to DMABUFs remained after the buffer is destroyed.
Change-Id: Ic04f861dd067ad8e420d21cd492fb2e2e8a9b585
Signed-off-by: Tony SIM <chinyeow.sim.xt@renesas.com>
static void destroy_buffer(struct wl_resource *resource)
{
struct wl_kms_buffer *buffer = resource->data;
static void destroy_buffer(struct wl_resource *resource)
{
struct wl_kms_buffer *buffer = resource->data;
- struct drm_gem_close close;
- int ret;
+ struct drm_gem_close gem_close;
+ int i, ret;
+
+ for (i = 0; i < buffer->num_planes; i++)
+ close(buffer->planes[i].fd);
- close.handle = buffer->handle;
- ret = drmIoctl(buffer->kms->fd, DRM_IOCTL_GEM_CLOSE, &close);
+ gem_close.handle = buffer->handle;
+ ret = drmIoctl(buffer->kms->fd, DRM_IOCTL_GEM_CLOSE, &gem_close);
if (ret)
WLKMS_DEBUG("%s: %s: DRM_IOCTL_GEM_CLOSE failed.(%s)\n",
__FILE__, __func__, strerror(errno));
if (ret)
WLKMS_DEBUG("%s: %s: DRM_IOCTL_GEM_CLOSE failed.(%s)\n",
__FILE__, __func__, strerror(errno));