From d120feb0a4fa30eb8dd31a77781cd4ac89168fce Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 12 May 2021 08:42:01 +0900 Subject: [PATCH] tbm_bo: check the bo which has the same bo_data There is just one bo with a bo_data, so increase the reference count when it has the same bo_data. Change-Id: I6258a6a8bf1f8a268619c70278f7b0d57a20b9ac --- src/tbm_bo.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/tbm_bo.c b/src/tbm_bo.c index 0f2b138..5cc343d 100644 --- a/src/tbm_bo.c +++ b/src/tbm_bo.c @@ -618,7 +618,7 @@ tbm_bo_alloc_with_surface(tbm_bufmgr bufmgr, int width, int height, int format, tbm_bo tbm_bo_alloc_with_bo_data(tbm_bufmgr bufmgr, tbm_backend_bo_data *bo_data, int flags) { - tbm_bo bo; + tbm_bo bo, bo2; _tbm_bufmgr_mutex_lock(); _tbm_set_last_result(TBM_ERROR_NONE); @@ -626,6 +626,19 @@ tbm_bo_alloc_with_bo_data(tbm_bufmgr bufmgr, tbm_backend_bo_data *bo_data, int f TBM_BO_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL); TBM_BO_RETURN_VAL_IF_FAIL(bo_data, NULL); + // return an existed bo if the bo is already created with the same bo_data. + if (!LIST_IS_EMPTY(&bufmgr->bo_list)) { + LIST_FOR_EACH_ENTRY(bo2, &bufmgr->bo_list, item_link) { + if (bo2->bo_data == bo_data) { + TBM_ERR("find bo(%p) ref(%d) flag(%s) in list\n", + bo2, bo2->ref_cnt, _tbm_flag_to_str(bo2->flags)); + bo2->ref_cnt++; + _tbm_bufmgr_mutex_unlock(); + return bo2; + } + } + } + bo = calloc(1, sizeof(struct _tbm_bo)); if (!bo) { /* LCOV_EXCL_START */ -- 2.7.4