From: Hyunho Kang Date: Fri, 14 Jul 2017 02:20:02 +0000 (+0900) Subject: Do not destroy buffer when receive same buffer X-Git-Tag: accepted/tizen/3.0/common/20170717.110951^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6e1c4b55b142ea22e730bab785b5512e5dbd0b8a;p=platform%2Fcore%2Fappfw%2Fscreen-connector.git Do not destroy buffer when receive same buffer Change-Id: Ie5a3560a1a745534e950359e4949007d64c7fca4 Signed-off-by: Hyunho Kang --- diff --git a/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c b/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c index ce6a499..41a7926 100644 --- a/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c +++ b/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c @@ -95,7 +95,7 @@ static void __cur_buffer_info_ref(cur_buffer_info_h info) info->ref_count++; } -static void __cur_buffer_info_unref(struct tizen_remote_surface *trs, cur_buffer_info_h info) +static bool __cur_buffer_info_unref(struct tizen_remote_surface *trs, cur_buffer_info_h info) { tbm_surface_h cur_tbm_surface; @@ -105,7 +105,10 @@ static void __cur_buffer_info_unref(struct tizen_remote_surface *trs, cur_buffer cur_tbm_surface = (tbm_surface_h)wl_buffer_get_user_data(info->cur_buffer); tbm_surface_internal_unref(cur_tbm_surface); g_hash_table_remove(__cur_buffer_table, info->cur_buffer); + return true; } + + return false; } static void __destroy_cur_buffer(gpointer data) @@ -115,9 +118,6 @@ static void __destroy_cur_buffer(gpointer data) if (!info) return; - if (info->cur_buffer) - wl_buffer_destroy(info->cur_buffer); - free(info); } @@ -667,8 +667,18 @@ static void __toolkit_update_cb(struct tizen_remote_surface *trs, uint32_t type, if (toolkit_evas_h->cur_buffer) { if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) { c_buf_info = g_hash_table_lookup(__cur_buffer_table, toolkit_evas_h->cur_buffer); - if (c_buf_info != NULL) - __cur_buffer_info_unref(trs, c_buf_info); + if (c_buf_info != NULL) { + struct wl_buffer *tmp_buffer = c_buf_info->cur_buffer; + if (__cur_buffer_info_unref(trs, c_buf_info)) { + if(tmp_buffer != NULL) { + if (tmp_buffer != tbm) { + wl_buffer_destroy(tmp_buffer); + } else { + LOGE("Same buffer %p", tmp_buffer); + } + } + } + } } }