From 66da0d9230b24c2ea6f9a98087a6642387144323 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 26 Jul 2016 08:38:26 +0900 Subject: [PATCH] remove release handler when commit failed 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 | 19 +++++++++++++++++++ src/tdm_pp.c | 3 +++ src/tdm_private.h | 3 +++ 3 files changed, 25 insertions(+) diff --git a/src/tdm_buffer.c b/src/tdm_buffer.c index 9b4bdb8..f6a5aea 100644 --- a/src/tdm_buffer.c +++ b/src/tdm_buffer.c @@ -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) diff --git a/src/tdm_pp.c b/src/tdm_pp.c index e9d5183..dab6529 100644 --- a/src/tdm_pp.c +++ b/src/tdm_pp.c @@ -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); diff --git a/src/tdm_private.h b/src/tdm_private.h index f66bed3..a641440 100644 --- a/src/tdm_private.h +++ b/src/tdm_private.h @@ -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); -- 2.7.4