From 6f4c654f11ec32009cdef1adac07c4b1b7cf43cb Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Thu, 25 Mar 2021 12:46:10 +0900 Subject: [PATCH] Close release_fence_fd when wl_egl_buffer freed. - The fenced_release event can be dispatched just before the wl_egl_buffer is freed. At this time, release_fence_fd delivered to fenced_release event may leak if it is not closed because wl_egl_buffer cannot be used and is freed. Change-Id: I7584c518b955c83f632b2d5ea281272f8dd2b166 Signed-off-by: Joonbum Ko --- src/tpl_wl_egl_thread.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index 6147716..41bc081 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2353,6 +2353,8 @@ __tpl_wl_egl_surface_dequeue_buffer(tpl_surface_t *surface, uint64_t timeout_ns, *release_fence = wl_egl_buffer->release_fence_fd; TPL_DEBUG("wl_egl_surface(%p) wl_egl_buffer(%p) release_fence_fd(%d)", wl_egl_surface, wl_egl_buffer, *release_fence); + + wl_egl_buffer->release_fence_fd = -1; } else { *release_fence = -1; } @@ -3286,6 +3288,11 @@ __cb_wl_egl_buffer_free(tpl_wl_egl_buffer_t *wl_egl_buffer) wl_egl_buffer->buffer_release = NULL; } + if (wl_egl_buffer->release_fence_fd != -1) { + close(wl_egl_buffer->release_fence_fd); + wl_egl_buffer->release_fence_fd = -1; + } + if (wl_egl_buffer->waiting_source) { tpl_gsource_destroy(wl_egl_buffer->waiting_source, TPL_FALSE); wl_egl_buffer->waiting_source = NULL; -- 2.34.1