- pthread_mutex_lock(&bufmgr->lock);
-
- bo_priv = bufmgr->backend->bo_alloc(bo, size, flags);
- if (!bo_priv) {
- TBM_TRACE("error: fail to create of tbm_bo size(%d) flag(%s)\n", size, tbm_flag_to_str(flags));
- _tbm_set_last_result(TBM_BO_ERROR_BO_ALLOC_FAILED);
- free(bo);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }
-
- bo->ref_cnt = 1;
- bo->flags = flags;
- bo->priv = bo_priv;
-
- TBM_TRACE("bo(%p) size(%d) refcnt(%d), flag(%s)\n", bo, size, bo->ref_cnt, tbm_flag_to_str(bo->flags));
-
- LIST_INITHEAD(&bo->user_data_list);
-
- LIST_ADD(&bo->item_link, &bufmgr->bo_list);
-
- pthread_mutex_unlock(&bufmgr->lock);
-
- return bo;
-}
-
-tbm_bo
-tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key)
-{
- TBM_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL);
-
- tbm_bo bo = NULL;
- tbm_bo bo2 = NULL;
- tbm_bo tmp = NULL;
- void *bo_priv = NULL;
-
- _tbm_util_check_bo_cnt(bufmgr);
-
- pthread_mutex_lock(&bufmgr->lock);
-
- bo = calloc(1, sizeof(struct _tbm_bo));
- if (!bo) {
- TBM_TRACE("error: fail to import of tbm_bo by key(%d)\n", key);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }
-
- bufmgr->bo_cnt++;
-
- bo->bufmgr = bufmgr;
-
- bo_priv = bufmgr->backend->bo_import(bo, key);
- if (!bo_priv) {
- TBM_TRACE("error: fail to import of tbm_bo by key(%d)\n", key);
- _tbm_set_last_result(TBM_BO_ERROR_IMPORT_FAILED);
- free(bo);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }
-
- if (!LIST_IS_EMPTY(&bufmgr->bo_list)) {
- LIST_FOR_EACH_ENTRY_SAFE(bo2, tmp, &bufmgr->bo_list, item_link) {
- if (bo2->priv == bo_priv) {
- TBM_TRACE("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);
- pthread_mutex_unlock(&bufmgr->lock);
- return bo2;
- }
- }
- }
-
- bo->ref_cnt = 1;
- bo->priv = bo_priv;
-
- if (bufmgr->backend->bo_get_flags)
- bo->flags = bufmgr->backend->bo_get_flags(bo);
- else
- bo->flags = TBM_BO_DEFAULT;
-
- TBM_TRACE("import new bo(%p) ref(%d) key(%d) flag(%s) in list\n",
- bo, bo->ref_cnt, key, tbm_flag_to_str(bo->flags));
-
- LIST_INITHEAD(&bo->user_data_list);
-
- LIST_ADD(&bo->item_link, &bufmgr->bo_list);
-
- pthread_mutex_unlock(&bufmgr->lock);
-
- return bo;
-}
-
-tbm_bo
-tbm_bo_import_fd(tbm_bufmgr bufmgr, tbm_fd fd)
-{
- TBM_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL);
-
- tbm_bo bo = NULL;
- tbm_bo bo2 = NULL;
- tbm_bo tmp = NULL;
- void *bo_priv = NULL;
-
- _tbm_util_check_bo_cnt(bufmgr);
-
- pthread_mutex_lock(&bufmgr->lock);
-
- bo = calloc(1, sizeof(struct _tbm_bo));
- if (!bo) {
- TBM_TRACE("error: fail to import tbm_bo by tbm_fd(%d)\n", fd);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }
-
- bufmgr->bo_cnt++;
-
- bo->bufmgr = bufmgr;
-
- bo_priv = bufmgr->backend->bo_import_fd(bo, fd);
- if (!bo_priv) {
- TBM_TRACE("error: fail to import tbm_bo by tbm_fd(%d)\n", fd);
- _tbm_set_last_result(TBM_BO_ERROR_IMPORT_FD_FAILED);
- free(bo);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }