output: add debug logs
[platform/core/uifw/libtdm.git] / src / tdm_buffer.c
index 3c48e0e..6037dc2 100644 (file)
@@ -60,7 +60,7 @@ _tdm_buffer_destroy_info(void *user_data)
 
        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);
        }
 
@@ -77,7 +77,7 @@ _tdm_buffer_destroy_info(void *user_data)
                free(func_info);
        }
 
-       if (tdm_debug_buffer)
+       if (tdm_debug_module & TDM_DEBUG_BUFFER)
                TDM_INFO("%p destroyed", buf_info->buffer);
 
        free(buf_info);
@@ -100,14 +100,17 @@ tdm_buffer_get_info(tbm_surface_h buffer)
 
                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);
        }
 
@@ -133,7 +136,7 @@ tdm_buffer_add_release_handler(tbm_surface_h 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;
 }
@@ -162,6 +165,25 @@ tdm_buffer_remove_release_handler(tbm_surface_h buffer,
        }
 }
 
+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)
@@ -196,14 +218,13 @@ tdm_buffer_unref_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);
 }
@@ -227,7 +248,7 @@ tdm_buffer_add_destroy_handler(tbm_surface_h 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;
 }
@@ -263,6 +284,9 @@ tdm_buffer_list_get_first_entry(struct list_head *list)
 
        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;