Do not destroy buffer when receive same buffer 20/138820/1 accepted/tizen/3.0/common/20170717.110951 accepted/tizen/3.0/ivi/20170717.085544 accepted/tizen/3.0/mobile/20170717.085540 accepted/tizen/3.0/tv/20170717.085615 accepted/tizen/3.0/wearable/20170717.085618 submit/tizen_3.0/20170714.025147
authorHyunho Kang <hhstark.kang@samsung.com>
Fri, 14 Jul 2017 02:20:02 +0000 (11:20 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Fri, 14 Jul 2017 02:20:45 +0000 (11:20 +0900)
Change-Id: Ie5a3560a1a745534e950359e4949007d64c7fca4
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c

index ce6a499..41a7926 100644 (file)
@@ -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);
+                                               }
+                                       }
+                               }
+                       }
                }
        }