From 7d4b4af6e3fa30d838b15fb031e2337842823d71 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Thu, 18 Jul 2019 20:42:22 +0900 Subject: [PATCH] hwc: referencing target buffer while showing the target buffer, increase ref count to prevent buffer destroy. Change-Id: I2aa715d1649e16fa91b38767411349e59b8c3d6f Signed-off-by: Junkyeong Kim --- src/tdm.c | 2 ++ src/tdm_hwc.c | 14 ++++++++++++++ src/tdm_private_types.h | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/tdm.c b/src/tdm.c index 81e653a..f20bfa4 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -335,6 +335,8 @@ tdm_display_destroy_private_output(tdm_private_output *private_output) private_hwc = private_output->private_hwc; LIST_FOR_EACH_ENTRY_SAFE(hw, hww, &private_hwc->hwc_window_list, link) tdm_hwc_window_destroy_internal(hw); + if (private_hwc->display_target_buffer) + tbm_surface_internal_unref(private_hwc->display_target_buffer); free(private_hwc); } else { LIST_FOR_EACH_ENTRY_SAFE(l, ll, &private_output->layer_list, link) diff --git a/src/tdm_hwc.c b/src/tdm_hwc.c index 0589bc1..65f232c 100644 --- a/src/tdm_hwc.c +++ b/src/tdm_hwc.c @@ -357,6 +357,20 @@ tdm_hwc_set_client_target_buffer(tdm_hwc *hwc, tbm_surface_h target_buffer, tdm_ ret = func_hwc->hwc_set_client_target_buffer(private_hwc->hwc_backend, target_buffer, damage); + if (private_hwc->display_target_buffer) { + if (private_hwc->display_target_buffer != target_buffer) { + tbm_surface_internal_unref(private_hwc->display_target_buffer); + private_hwc->display_target_buffer = target_buffer; + if (target_buffer) + tbm_surface_internal_ref(private_hwc->display_target_buffer); + } + } else { + if (target_buffer) { + private_hwc->display_target_buffer = target_buffer; + tbm_surface_internal_ref(private_hwc->display_target_buffer); + } + } + _pthread_mutex_unlock(&private_display->lock); return ret; diff --git a/src/tdm_private_types.h b/src/tdm_private_types.h index 80d867f..dfea22a 100644 --- a/src/tdm_private_types.h +++ b/src/tdm_private_types.h @@ -327,6 +327,8 @@ struct _tdm_private_hwc { int regist_commit_cb; tdm_hwc *hwc_backend; + + tbm_surface_h display_target_buffer; }; struct _tdm_private_hwc_window { -- 2.7.4