if (buf_info->backend_ref_count > 0) {
TDM_NEVER_GET_HERE();
- if (tdm_debug_buffer)
+ if (tdm_debug_module & TDM_DEBUG_BUFFER)
TDM_INFO("%p", buf_info->buffer);
}
free(func_info);
}
- if (tdm_debug_buffer)
+ if (tdm_debug_module & TDM_DEBUG_BUFFER)
TDM_INFO("%p destroyed", buf_info->buffer);
free(buf_info);
if (!tbm_surface_internal_add_user_data(buffer, TDM_BUFFER_KEY, _tdm_buffer_destroy_info)) {
TDM_ERR("FAIL to create user_data for surface %p", buffer);
+ free(buf_info);
return NULL;
}
if (!tbm_surface_internal_set_user_data(buffer, TDM_BUFFER_KEY, buf_info)) {
TDM_ERR("FAIL to set user_data for surface %p", buffer);
+ tbm_surface_internal_delete_user_data(buffer, TDM_BUFFER_KEY);
+ free(buf_info);
return NULL;
}
- if (tdm_debug_buffer)
+ if (tdm_debug_module & TDM_DEBUG_BUFFER)
TDM_INFO("%p created", buf_info->buffer);
}
func_info->release_func = func;
func_info->user_data = user_data;
- LIST_ADD(&func_info->link, &buf_info->release_funcs);
+ LIST_ADDTAIL(&func_info->link, &buf_info->release_funcs);
return TDM_ERROR_NONE;
}
}
}
+INTERN void
+tdm_buffer_remove_release_handler_internal(tbm_surface_h buffer)
+{
+ tdm_buffer_info *buf_info;
+ tdm_buffer_func_info *func_info = NULL, *next = NULL;
+
+ TDM_RETURN_IF_FAIL(buffer != NULL);
+
+ buf_info = tdm_buffer_get_info(buffer);
+ TDM_RETURN_IF_FAIL(buf_info != NULL);
+
+ LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link) {
+
+ LIST_DEL(&func_info->link);
+ free(func_info);
+
+ return;
+ }
+}
EXTERN tbm_surface_h
tdm_buffer_ref_backend(tbm_surface_h buffer)
return;
}
- if (!tdm_thread_in_display_thread(syscall(SYS_gettid)))
- TDM_NEVER_GET_HERE();
+// if (!tdm_thread_in_display_thread(syscall(SYS_gettid)))
+// TDM_NEVER_GET_HERE();
- LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link) {
- tbm_surface_internal_ref(buffer);
- func_info->release_func(buffer, func_info->user_data);
- tbm_surface_internal_unref(buffer);
- }
+ tbm_surface_internal_ref(buffer);
+ LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link)
+ func_info->release_func(buffer, func_info->user_data);
+ tbm_surface_internal_unref(buffer);
tbm_surface_internal_unref(buffer);
}
func_info->destroy_func = func;
func_info->user_data = user_data;
- LIST_ADD(&func_info->link, &buf_info->destroy_funcs);
+ LIST_ADDTAIL(&func_info->link, &buf_info->destroy_funcs);
return TDM_ERROR_NONE;
}
TDM_RETURN_VAL_IF_FAIL(list != NULL, NULL);
+ if (LIST_IS_EMPTY(list))
+ return NULL;
+
buf_info = container_of((list)->next, buf_info, link);
return buf_info->buffer;