1From f602b645bbb212dfcabf34410af09b9cf6597d82 Mon Sep 17 00:00:00 2001
2From: Jeffy Chen <jeffy.chen@rock-chips.com>
3Date: Tue, 18 Jan 2022 12:20:10 +0800
4Subject: [PATCH 28/33] kmssink: Avoid double-closing shared gem handle
5
6The gem handle could be shared between multiple planes.
7
8Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
9---
10 sys/kms/gstkmsallocator.c | 6 ++++++
11 1 file changed, 6 insertions(+)
12
13diff --git a/sys/kms/gstkmsallocator.c b/sys/kms/gstkmsallocator.c
14index 6fe6a07..5d81643 100644
15--- a/sys/kms/gstkmsallocator.c
16+++ b/sys/kms/gstkmsallocator.c
17@@ -566,6 +566,7 @@ gst_kms_allocator_dmabuf_import (GstAllocator * allocator, gint * prime_fds,
18   GstKMSMemory *kmsmem;
19   GstMemory *mem;
20   gint i, ret;
21+  guint32 handle = 0;
22
23   g_return_val_if_fail (n_planes <= GST_VIDEO_MAX_PLANES, FALSE);
24
25@@ -592,6 +593,11 @@ gst_kms_allocator_dmabuf_import (GstAllocator * allocator, gint * prime_fds,
26     struct drm_gem_close arg = { kmsmem->gem_handle[i], };
27     gint err;
28
29+    if (handle == arg.handle)
30+      break;
31+
32+    handle = arg.handle;
33+
34     err = drmIoctl (alloc->priv->fd, DRM_IOCTL_GEM_CLOSE, &arg);
35     if (err)
36       GST_WARNING_OBJECT (allocator,
37--
382.20.1
39
40