- bo->bufmgr = bufmgr;
-
- if (bo->bufmgr->backend_module_data) {
- bo_data = bo->bufmgr->bufmgr_func->bufmgr_import_key(bufmgr->bufmgr_data, key, &error);
- if (!bo_data) {
- /* LCOV_EXCL_START */
- TBM_ERR("error: fail to import of tbm_bo by key(%d). error(%d)\n", key, error);
- _tbm_set_last_result(TBM_BO_ERROR_IMPORT_FAILED);
- free(bo);
- _tbm_bo_mutex_unlock();
- return NULL;
- /* LCOV_EXCL_STOP */
- }
-
- if (!LIST_IS_EMPTY(&bo->bufmgr->bo_list)) {
- LIST_FOR_EACH_ENTRY(bo2, &bo->bufmgr->bo_list, item_link) {
- if (bo2->bo_data == bo_data) {
- TBM_TRACE_BO("find bo(%p) ref(%d) key(%d) flag(%s) in list\n",
- bo2, bo2->ref_cnt, key,
- _tbm_flag_to_str(bo2->flags));
- bo2->ref_cnt++;
- free(bo);
- _tbm_bo_mutex_unlock();
- return bo2;
- }
- }
- }
- bo->bo_data = bo_data;
- } else {
- bo_priv = bo->bufmgr->backend->bo_import(bo, key);
- if (!bo_priv) {
- /* LCOV_EXCL_START */
- TBM_ERR("error: fail to import of tbm_bo by key(%d)\n", key);
- _tbm_set_last_result(TBM_BO_ERROR_IMPORT_FAILED);
- free(bo);
- _tbm_bo_mutex_unlock();
- return NULL;
- /* LCOV_EXCL_STOP */
- }
-
- if (!LIST_IS_EMPTY(&bo->bufmgr->bo_list)) {
- LIST_FOR_EACH_ENTRY(bo2, &bo->bufmgr->bo_list, item_link) {
- if (bo2->priv == bo_priv) {
- TBM_TRACE_BO("find bo(%p) ref(%d) key(%d) flag(%s) in list\n",
- bo2, bo2->ref_cnt, key,
- _tbm_flag_to_str(bo2->flags));
- bo2->ref_cnt++;
- free(bo);
- _tbm_bo_mutex_unlock();
- return bo2;
- }
- }
- }
- bo->priv = bo_priv;
- }
-
- bo->bufmgr->bo_cnt++;
- bo->ref_cnt = 1;
-
- if (bo->bufmgr->backend_module_data) {
- bo->flags = bo->bufmgr->bo_func->bo_get_memory_types(bo->bo_data, &error);
- if (error != TBM_ERROR_NONE) {
- TBM_ERR("fail to get the bo flags(memory_types)");
- bo->flags = TBM_BO_DEFAULT;
- }
- } else {
- if (bo->bufmgr->backend->bo_get_flags)
- bo->flags = bo->bufmgr->backend->bo_get_flags(bo);
- else
- bo->flags = TBM_BO_DEFAULT;
- }
-