1*4882a593SmuzhiyunFrom f52c65f0eea9d6a6f8ecfc31778807f60a1ef950 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Tue, 18 Jan 2022 12:20:10 +0800 4*4882a593SmuzhiyunSubject: [PATCH 29/41] kmssink: Avoid double-closing shared gem handle 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThe gem handle could be shared between multiple planes. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 9*4882a593Smuzhiyun--- 10*4882a593Smuzhiyun sys/kms/gstkmsallocator.c | 6 ++++++ 11*4882a593Smuzhiyun 1 file changed, 6 insertions(+) 12*4882a593Smuzhiyun 13*4882a593Smuzhiyundiff --git a/sys/kms/gstkmsallocator.c b/sys/kms/gstkmsallocator.c 14*4882a593Smuzhiyunindex ad56a17..359646a 100644 15*4882a593Smuzhiyun--- a/sys/kms/gstkmsallocator.c 16*4882a593Smuzhiyun+++ b/sys/kms/gstkmsallocator.c 17*4882a593Smuzhiyun@@ -538,6 +538,7 @@ gst_kms_allocator_dmabuf_import (GstAllocator * allocator, gint * prime_fds, 18*4882a593Smuzhiyun GstKMSMemory *kmsmem; 19*4882a593Smuzhiyun GstMemory *mem; 20*4882a593Smuzhiyun gint i, ret; 21*4882a593Smuzhiyun+ guint32 handle = 0; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun g_return_val_if_fail (n_planes <= GST_VIDEO_MAX_PLANES, FALSE); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun@@ -564,6 +565,11 @@ gst_kms_allocator_dmabuf_import (GstAllocator * allocator, gint * prime_fds, 26*4882a593Smuzhiyun struct drm_gem_close arg = { kmsmem->gem_handle[i], }; 27*4882a593Smuzhiyun gint err; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun+ if (handle == arg.handle) 30*4882a593Smuzhiyun+ break; 31*4882a593Smuzhiyun+ 32*4882a593Smuzhiyun+ handle = arg.handle; 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun err = drmIoctl (alloc->priv->fd, DRM_IOCTL_GEM_CLOSE, &arg); 35*4882a593Smuzhiyun if (err) 36*4882a593Smuzhiyun GST_WARNING_OBJECT (allocator, 37*4882a593Smuzhiyun-- 38*4882a593Smuzhiyun2.20.1 39*4882a593Smuzhiyun 40