tbm_surface_internal_unref has to called before get_user_data. 78/66478/2
authorjoonbum.ko <joonbum.ko@samsung.com>
Tue, 19 Apr 2016 06:26:28 +0000 (15:26 +0900)
committerjoonbum.ko <joonbum.ko@samsung.com>
Tue, 19 Apr 2016 07:46:43 +0000 (16:46 +0900)
 - When client received release_cb from server, if client surface already destroyed
  released tbm_surface should be destroyed before checking its own user_data.

Change-Id: I5ed2c880182e1f64c6e2b70bdcfe9b6722b204d0

src/tpl_wayland_egl.c

index 9b4ef59..9cbe8cb 100644 (file)
@@ -795,14 +795,17 @@ __cb_client_buffer_release_callback(void *data, struct wl_proxy *proxy)
 
        tbm_surface = (tbm_surface_h) data;
 
+       /* If tbm_surface_queue reset/destroy before this callback
+        * tbm_surface will be not used any more.
+        * So, it should be detroyed before getting its user_data */
+       tbm_surface_internal_unref(tbm_surface);
+
        wayland_egl_buffer =
                __tpl_wayland_egl_get_wayland_buffer_from_tbm_surface(tbm_surface);
 
        if (wayland_egl_buffer) {
                wayland_egl_surface = wayland_egl_buffer->wayland_egl_surface;
 
-               tbm_surface_internal_unref(tbm_surface);
-
                tbm_surface_queue_release(wayland_egl_surface->tbm_queue, tbm_surface);
        }
 }