From 641f5b97e53e4d603c32adb93254ae69d852a9ba Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 21 Feb 2018 20:08:10 +0900 Subject: free allocated display buffers when deinit Change-Id: I8bc68f7ef1f7fef62c7c3283698e3dd44f542392 Signed-off-by: Junkyeong Kim --- src/tdm_drm.c | 2 +- src/tdm_drm.h | 9 +++++---- src/tdm_drm_display.c | 11 +++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/tdm_drm.c b/src/tdm_drm.c index 102c7b8..9dd70f1 100644 --- a/src/tdm_drm.c +++ b/src/tdm_drm.c @@ -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) diff --git a/src/tdm_drm.h b/src/tdm_drm.h index 9cd3b02..063d059 100644 --- a/src/tdm_drm.h +++ b/src/tdm_drm.h @@ -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_ */ diff --git a/src/tdm_drm_display.c b/src/tdm_drm_display.c index d9304eb..6978d05 100644 --- a/src/tdm_drm_display.c +++ b/src/tdm_drm_display.c @@ -737,6 +737,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) { -- cgit v1.2.3