remove release handler when commit failed 71/81371/2
authorBoram Park <boram1288.park@samsung.com>
Mon, 25 Jul 2016 23:38:26 +0000 (08:38 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 25 Jul 2016 23:45:36 +0000 (08:45 +0900)
This is the temporary solution(kismo.kim@samsung.com) to avoid the release
handler is called when commit failed. It looks we need something like the
pp_done handler to let the display server know if the pp operation is done
successfully or not.

Change-Id: I1513a99c89102431fd3b74b656d1f1243528d28a

src/tdm_buffer.c
src/tdm_pp.c
src/tdm_private.h

index 9b4bdb8..f6a5aea 100644 (file)
@@ -162,6 +162,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)
index e9d5183..dab6529 100644 (file)
@@ -438,6 +438,9 @@ tdm_pp_commit(tdm_pp *pp)
                LIST_DEL(&b->commit_link);
 
                if (ret != TDM_ERROR_NONE) {
+                       tdm_buffer_remove_release_handler_internal(b->src);
+                       tdm_buffer_remove_release_handler_internal(b->dst);
+
                        tdm_buffer_unref_backend(b->src);
                        tdm_buffer_unref_backend(b->dst);
                        LIST_DEL(&b->link);
index f66bed3..a641440 100644 (file)
@@ -386,6 +386,9 @@ tdm_buffer_list_get_first_entry(struct list_head *list);
 void
 tdm_buffer_list_dump(struct list_head *list);
 
+void
+tdm_buffer_remove_release_handler_internal(tbm_surface_h buffer);
+
 /* event functions for private */
 tdm_error
 tdm_event_loop_init(tdm_private_display *private_display);