e_comp_wl: add buffer_ref link check flag to make sure that delete operation is done... 32/73632/2 accepted/tizen/common/20160609.145050 accepted/tizen/ivi/20160609.091848 accepted/tizen/mobile/20160609.092031 accepted/tizen/tv/20160609.091831 accepted/tizen/wearable/20160609.091901 submit/tizen/20160609.054844
authorSungbae Park <sb34.park@samsung.com>
Thu, 9 Jun 2016 04:04:33 +0000 (13:04 +0900)
committerSungBae Park <sb34.park@samsung.com>
Thu, 9 Jun 2016 05:06:01 +0000 (22:06 -0700)
Signed-off-by: Sungbae Park <sb34.park@samsung.com>
Change-Id: I7627a57a105328520766935529c33efbae73b2a1

src/bin/e_comp_wl.c
src/bin/e_comp_wl.h

index be76378aaaccae3bd806968b9781dee72e6e0cdc..466c8c2de1dd3e10b1d178d2601b3ebcd48f94ac 100644 (file)
@@ -1672,6 +1672,7 @@ _e_comp_wl_buffer_reference_cb_destroy(struct wl_listener *listener, void *data)
    ref = container_of(listener, E_Comp_Wl_Buffer_Ref, destroy_listener);
    if ((E_Comp_Wl_Buffer *)data != ref->buffer) return;
    ref->buffer = NULL;
+   ref->destroy_listener_usable = EINA_FALSE;
 }
 
 static void
@@ -4782,13 +4783,19 @@ e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
                   wl_buffer_send_release(ref->buffer->resource);
                }
           }
-        wl_list_remove(&ref->destroy_listener.link);
+
+        if (ref->destroy_listener_usable)
+          {
+             wl_list_remove(&ref->destroy_listener.link);
+             ref->destroy_listener_usable = EINA_FALSE;
+          }
      }
 
    if ((buffer) && (buffer != ref->buffer))
      {
         buffer->busy++;
         wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
+        ref->destroy_listener_usable = EINA_TRUE;
      }
 
    ref->buffer = buffer;
index 2a0b0d13daf58be45177e8bc6f40a168a06a772f..65fed567516f95b343af529b4952f32e248e98df 100644 (file)
@@ -88,6 +88,7 @@ struct _E_Comp_Wl_Buffer_Ref
 {
    E_Comp_Wl_Buffer *buffer;
    struct wl_listener destroy_listener;
+   Eina_Bool          destroy_listener_usable;
 };
 
 struct _E_Comp_Wl_Buffer_Viewport {