1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
From 19005bb487c31aacecab333d8a40ab6434885911 Mon Sep 17 00:00:00 2001
From: Vincent Cheah Beng Keat <vincent.beng.keat.cheah@intel.com>
Date: Fri, 24 Mar 2023 22:59:08 +0800
Subject: [PATCH 1/5] Fix valgrind leak reported on wayland
Upstream-Status: Backport
Expect it to be removed once move to v2023.2.0 and above.
https://github.com/oneapi-src/oneVPL/commit/d276bb08e060956cde678d2c15fc291eec46d1dc
---
.../legacy/sample_common/include/vaapi_utils.h | 2 ++
tools/legacy/sample_common/src/vaapi_device.cpp | 1 +
tools/legacy/sample_common/src/vaapi_utils.cpp | 3 ++-
.../sample_misc/wayland/src/class_wayland.cpp | 17 +++++++++++++++--
4 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/tools/legacy/sample_common/include/vaapi_utils.h b/tools/legacy/sample_common/include/vaapi_utils.h
index 9d80255..2598883 100644
--- a/tools/legacy/sample_common/include/vaapi_utils.h
+++ b/tools/legacy/sample_common/include/vaapi_utils.h
@@ -315,11 +315,13 @@ private:
public:
typedef Wayland* (*WaylandCreate_type)(void);
+ typedef void (*WaylandDestroy_type)(Wayland*);
VA_WaylandClientProxy();
~VA_WaylandClientProxy();
const WaylandCreate_type WaylandCreate;
+ const WaylandDestroy_type WaylandDestroy;
};
#endif // LIBVA_WAYLAND_SUPPORT
diff --git a/tools/legacy/sample_common/src/vaapi_device.cpp b/tools/legacy/sample_common/src/vaapi_device.cpp
index e621251..98c5883 100644
--- a/tools/legacy/sample_common/src/vaapi_device.cpp
+++ b/tools/legacy/sample_common/src/vaapi_device.cpp
@@ -349,6 +349,7 @@ mfxStatus CVAAPIDeviceX11::RenderFrame(mfxFrameSurface1* pSurface,
CVAAPIDeviceWayland::~CVAAPIDeviceWayland(void) {
Close();
+ m_WaylandClient.WaylandDestroy((MfxLoader::Wayland*)m_Wayland);
}
mfxStatus CVAAPIDeviceWayland::Init(mfxHDL hWindow, mfxU16 nViews, mfxU32 nAdapterNum) {
diff --git a/tools/legacy/sample_common/src/vaapi_utils.cpp b/tools/legacy/sample_common/src/vaapi_utils.cpp
index e107624..d7aba0a 100644
--- a/tools/legacy/sample_common/src/vaapi_utils.cpp
+++ b/tools/legacy/sample_common/src/vaapi_utils.cpp
@@ -182,7 +182,8 @@ Xcbpresent_Proxy::~Xcbpresent_Proxy() {}
VA_WaylandClientProxy::VA_WaylandClientProxy()
: lib(WAYLAND_LIB),
- SIMPLE_LOADER_FUNCTION(WaylandCreate) {}
+ SIMPLE_LOADER_FUNCTION(WaylandCreate),
+ SIMPLE_LOADER_FUNCTION(WaylandDestroy) {}
VA_WaylandClientProxy::~VA_WaylandClientProxy() {}
diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
index 1a0bffa..8f6edbb 100644
--- a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
+++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
@@ -149,11 +149,15 @@ void Wayland::FreeSurface() {
if (NULL != m_surface)
wl_surface_destroy(m_surface);
#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
- if (nullptr != m_xdg_toplevel)
+ if (NULL != m_xdg_toplevel)
xdg_toplevel_destroy(m_xdg_toplevel);
- if (nullptr != m_xdg_surface)
+ if (NULL != m_xdg_surface)
xdg_surface_destroy(m_xdg_surface);
#endif
+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
+ if (NULL != m_dmabuf)
+ zwp_linux_dmabuf_v1_destroy(m_dmabuf);
+#endif
}
void Wayland::Sync() {
@@ -379,10 +383,16 @@ struct wl_buffer* Wayland::CreatePrimeBuffer(uint32_t name,
}
Wayland::~Wayland() {
+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
+ if (NULL != m_xdg_wm_base)
+ xdg_wm_base_destroy(m_xdg_wm_base);
+#endif
if (NULL != m_shell)
wl_shell_destroy(m_shell);
if (NULL != m_shm)
wl_shm_destroy(m_shm);
+ if (NULL != m_drm)
+ wl_drm_destroy(m_drm);
if (NULL != m_bufmgr) {
drm_intel_bufmgr_destroy(m_bufmgr);
}
@@ -492,6 +502,9 @@ void Wayland::DestroyBufferList() {
msdkFrameSurface* surface = FindUsedSurface(m_buffer->pInSurface);
msdk_atomic_dec16(&(surface->render_lock));
}
+ wl_buffer_destroy(m_buffer->buffer);
+ m_buffer->buffer = NULL;
+ m_buffer->pInSurface = NULL;
m_buffers_list.pop_front();
delete m_buffer;
}
--
2.40.1
|