summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunkyeong Kim <jk0430.kim@samsung.com>2018-02-21 20:08:10 +0900
committerJunkyeong Kim <jk0430.kim@samsung.com>2018-02-21 20:08:18 +0900
commit641f5b97e53e4d603c32adb93254ae69d852a9ba (patch)
tree34fc284ab1ac369b14d53ffc8236370cbecb885f
parent3cb618b08ce7434dc5f0fb5cfedb50efbd9f9c2d (diff)
downloadlibtdm-drm-641f5b97e53e4d603c32adb93254ae69d852a9ba.tar.gz
libtdm-drm-641f5b97e53e4d603c32adb93254ae69d852a9ba.tar.bz2
libtdm-drm-641f5b97e53e4d603c32adb93254ae69d852a9ba.zip
free allocated display buffers when deinit
Change-Id: I8bc68f7ef1f7fef62c7c3283698e3dd44f542392 Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
-rw-r--r--src/tdm_drm.c2
-rw-r--r--src/tdm_drm.h9
-rw-r--r--src/tdm_drm_display.c11
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
@@ -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;