video: rockchip: rga3: destroy internal_buffer when user exits

When a user imports the same buffer from multiple threads, relying only
on put to reduce the reference count after the process exits will lead
to memory leaks.

Change-Id: I22e48eb89d23d0d1bc3066048235f1d58ba93511
Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2023-10-31 10:50:24 +08:00
committed by Tao Huang
parent 08092751f1
commit 0011fa588c

View File

@@ -840,6 +840,11 @@ static int rga_mm_handle_remove(int id, void *ptr, void *data)
return 0;
}
static void rga_mm_buffer_destroy(struct rga_internal_buffer *buffer)
{
rga_mm_kref_release_buffer(&buffer->refcount);
}
static struct rga_internal_buffer *
rga_mm_lookup_external(struct rga_mm *mm_session,
struct rga_external_buffer *external_buffer,
@@ -2142,9 +2147,9 @@ int rga_mm_session_release_buffer(struct rga_session *session)
idr_for_each_entry(&mm->memory_idr, buffer, i) {
if (session == buffer->session) {
pr_err("[tgid:%d] Decrement the reference of handle[%d] when the user exits\n",
pr_err("[tgid:%d] Destroy handle[%d] when the user exits\n",
session->tgid, buffer->handle);
kref_put(&buffer->refcount, rga_mm_kref_release_buffer);
rga_mm_buffer_destroy(buffer);
}
}