free allocated display buffers when deinit 95/170695/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 21 Feb 2018 11:08:10 +0000 (20:08 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 21 Feb 2018 11:08:18 +0000 (20:08 +0900)
Change-Id: I8bc68f7ef1f7fef62c7c3283698e3dd44f542392
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/tdm_drm.c
src/tdm_drm.h
src/tdm_drm_display.c

index 102c7b8..9dd70f1 100644 (file)
@@ -214,7 +214,7 @@ tdm_drm_deinit(tdm_backend_data *bdata)
 #ifdef HAVE_UDEV
        _tdm_drm_udev_deinit(drm_data);
 #endif
-
+       tdm_drm_display_destroy_buffer_list(drm_data);
        tdm_drm_display_destroy_output_list(drm_data);
 
        if (drm_data->plane_res)
index 9cd3b02..063d059 100644 (file)
@@ -121,12 +121,13 @@ typedef struct _tdm_drm_data {
        struct list_head buffer_list;
 } tdm_drm_data;
 
-uint32_t        tdm_drm_format_to_drm_format(tbm_format format);
-tbm_format   tdm_drm_format_to_tbm_format(uint32_t format);
+uint32_t       tdm_drm_format_to_drm_format(tbm_format format);
+tbm_format  tdm_drm_format_to_tbm_format(uint32_t format);
 
-void            tdm_drm_display_update_output_status(tdm_drm_data *drm_data);
+void           tdm_drm_display_update_output_status(tdm_drm_data *drm_data);
 tdm_error      tdm_drm_display_create_output_list(tdm_drm_data *drm_data);
-void            tdm_drm_display_destroy_output_list(tdm_drm_data *drm_data);
+void           tdm_drm_display_destroy_output_list(tdm_drm_data *drm_data);
 tdm_error      tdm_drm_display_create_layer_list(tdm_drm_data *drm_data);
+void           tdm_drm_display_destroy_buffer_list(tdm_drm_data *drm_data);
 
 #endif /* _TDM_DRM_H_ */
index d9304eb..6978d05 100644 (file)
@@ -738,6 +738,17 @@ tdm_drm_display_destroy_output_list(tdm_drm_data *drm_data)
 }
 
 void
+tdm_drm_display_destroy_buffer_list(tdm_drm_data *drm_data)
+{
+       tdm_drm_display_buffer *b = NULL, *bb = NULL;
+
+       LIST_FOR_EACH_ENTRY_SAFE(b, bb, &drm_data->buffer_list, link) {
+               tdm_buffer_remove_destroy_handler(b->buffer, _tdm_drm_display_cb_destroy_buffer, drm_data);
+               _tdm_drm_display_cb_destroy_buffer(b->buffer, drm_data);
+       }
+}
+
+void
 tdm_drm_display_update_output_status(tdm_drm_data *drm_data)
 {
        tdm_drm_output_data *output_data = NULL;