display: reset display_buffer of layer when buffer is destroyed 90/204190/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 22 Apr 2019 04:54:15 +0000 (13:54 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 22 Apr 2019 04:57:06 +0000 (13:57 +0900)
Change-Id: If73d11398b045a7612b59a91a76b364c384756dc

src/tdm_vc4_display.c

index c91fdbe..48a769e 100644 (file)
@@ -2256,6 +2256,8 @@ _tdm_vc4_display_cb_destroy_buffer(tbm_surface_h buffer, void *user_data)
 {
        tdm_vc4_data *vc4_data;
        tdm_vc4_display_buffer *display_buffer;
+       tdm_vc4_layer_data *layer_data = NULL;
+       tdm_vc4_output_data *output_data = NULL;
        char buf[256] = {0,};
        char *ret_tmp;
 
@@ -2276,6 +2278,13 @@ _tdm_vc4_display_cb_destroy_buffer(tbm_surface_h buffer, void *user_data)
                return;
        }
 
+       LIST_FOR_EACH_ENTRY(output_data, &vc4_data->output_list, link) {
+               LIST_FOR_EACH_ENTRY(layer_data, &output_data->layer_list, link) {
+                       if (display_buffer == layer_data->display_buffer)
+                               layer_data->display_buffer = NULL;
+               }
+       }
+
        if (display_buffer->fb_id > 0) {
                if (drmModeRmFB(vc4_data->drm_fd, display_buffer->fb_id) < 0) {
                        ret_tmp = strerror_r(errno, buf, sizeof(buf));