tdm: remove output->hwc_destroy_listerner 88/264588/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 27 Sep 2021 02:04:28 +0000 (11:04 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 27 Sep 2021 02:04:28 +0000 (11:04 +0900)
fix the memory leak.

Change-Id: Ib88fcdf1b3e9cbf48cd74f7215fb7a43f29a18dd

src/lib/tdm/tdm-internal.h
src/lib/tdm/tdm-output.c

index 0b553d4fc8d4b7a88670aed7d42945ad44a488f6..f2c01d4c59f6a991b9e8ab90c673e1b4f21f9142 100644 (file)
@@ -89,6 +89,8 @@ struct pepper_tdm_output {
        tbm_surface_h           back, front;
        pepper_bool_t           page_flip_pending;
 
+       pepper_event_listener_t *hwc_destroy_listener;
+
        pepper_list_t          link;
 };
 
index 23f967f37acea12f111764c5cdae8bdab08ee72a..7ceb3a5cc84c37e5b563e25a14af293af3dbb7f1 100644 (file)
@@ -69,7 +69,11 @@ __tdm_hwc_destroy(pepper_event_listener_t *listener, pepper_object_t *object,
 {
        PEPPER_INFO("\n");
 
-       free(data);
+       pepper_tdm_output_t *output = data;
+
+       pepper_event_listener_remove(output->hwc_destroy_listener);
+
+       free(output->hwc);
 }
 
 static int
@@ -116,10 +120,10 @@ __tdm_output_hwc_init(pepper_tdm_output_t *output)
        PEPPER_CHECK(hwc->base, goto error, "pepper_output_initialize_hwc() failed\n");
 
        // add destory handler for pepper_hwc object
-       pepper_object_add_event_listener((pepper_object_t *)hwc->base,
-                                                                        PEPPER_EVENT_OBJECT_DESTROY,
-                                                                        0,
-                                                                        __tdm_hwc_destroy, hwc);
+       output->hwc_destroy_listener = pepper_object_add_event_listener((pepper_object_t *)hwc->base,
+                                                                                                                               PEPPER_EVENT_OBJECT_DESTROY,
+                                                                                                                               0,
+                                                                                                                               __tdm_hwc_destroy, output);
 
        output->hwc = hwc;