From 4c2a3dbe7b652e679c9228d7d8c81aa641bd968b Mon Sep 17 00:00:00 2001 From: duerpei Date: Mon, 14 Mar 2022 13:27:43 +0800 Subject: Fix potential memory leak of two pointers (xwayland and client) This backports four patches from weston to solve a memory leak problem These four patches are: https://gitlab.freedesktop.org/wayland/weston/-/commit/5a6604a7a2e52e5cd84c1f53724b3f7c325b5dff.patch https://gitlab.freedesktop.org/wayland/weston/-/commit/f53c05d3c2c19c139c52e9bd621c2654dd3dac69.patch https://gitlab.freedesktop.org/wayland/weston/-/commit/e2583ca0844bd7a8ce4fc94da9ad67edf49ffd45.patch https://gitlab.freedesktop.org/wayland/weston/-/commit/8740037a93c7c4400cc381ecf3009d1e4014be07.patch The following is the valgrind log: 160 bytes in 1 blocks are definitely lost in loss record 39 of 66 at 0x484B64C: calloc (in /usr/lib/valgrind/vgpreload_memcheck-arm64-linux.so) by 0x4A73C87: ??? (in /usr/lib/libweston-desktop-8.so.0.0.0) by 0x4A7184F: weston_desktop_create (in /usr/lib/libweston-desktop-8.so.0.0.0) by 0x487096B: ivi_desktop_init (in /usr/lib/agl-compositor/libexec_compositor.so.0.0.0) by 0x486F5E7: wet_main (in /usr/lib/agl-compositor/libexec_compositor.so.0.0.0) by 0x48B010F: (below main) (in /lib/libc-2.31.so) In agl-compositor/src/composiotr.c "ivi->desktop->compositor->xwayland" is zalloced by wet_main()->ivi_desktop_init()->weston_desktop_create()->weston_desktop_xwayland_init() "ivi->desktop->compositor->xwayland->client" is zalloced by wet_main()->ivi_desktop_init()->weston_desktop_create()->weston_desktop_xwayland_init()->weston_desktop_client_create() "ivi->desktop->compositor->xwayland" and "ivi->desktop->compositor->xwayland->client" The memory pointed to has not been released Now, I want to free the memory pointed by the two pointers. What can do this is the function of weston_desktop_xwayland_fini() in 0003-libweston-desktop-add-weston_desktop_xwayland_fini.patch And the submission of this patch depends on the first three patches, so I submitted these four patches. Bug-AGL: SPEC-4291 Signed-off-by: duerpei Change-Id: I3b1140e88eadad9e378c2bb43221026e280ecd90 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/27257 Reviewed-by: Marius Vlad Reviewed-by: Jan-Simon Moeller Tested-by: Jenkins Job builder account --- ...esktop-rename-weston_desktop_client_destr.patch | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-rename-weston_desktop_client_destr.patch (limited to 'meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-rename-weston_desktop_client_destr.patch') diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-rename-weston_desktop_client_destr.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-rename-weston_desktop_client_destr.patch new file mode 100644 index 000000000..5332a89b0 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-rename-weston_desktop_client_destr.patch @@ -0,0 +1,51 @@ +From 5a6604a7a2e52e5cd84c1f53724b3f7c325b5dff Mon Sep 17 00:00:00 2001 +From: Pekka Paalanen +Upstream-Status: Backport +Date: Fri, 14 May 2021 15:54:56 +0300 +Subject: [PATCH] libweston-desktop: rename weston_desktop_client_destroy() + +This function here is a wl_resource destructor, but we will need another +function for externally triggered destroy when wl_resource does not +exist. + +Rename the existing function, because the old name fits better the new +function to be written. + +Signed-off-by: Pekka Paalanen +--- + libweston-desktop/client.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/libweston-desktop/client.c b/libweston-desktop/client.c +index 56413f713..ba7bfbc46 100644 +--- a/libweston-desktop/client.c ++++ b/libweston-desktop/client.c +@@ -49,7 +49,7 @@ weston_desktop_client_add_destroy_listener(struct weston_desktop_client *client, + } + + static void +-weston_desktop_client_destroy(struct wl_resource *resource) ++weston_desktop_client_handle_destroy(struct wl_resource *resource) + { + struct weston_desktop_client *client = + wl_resource_get_user_data(resource); +@@ -117,13 +117,12 @@ weston_desktop_client_create(struct weston_desktop *desktop, + + if (dispatcher != NULL) + wl_resource_set_dispatcher(client->resource, dispatcher, +- weston_desktop_client_destroy, client, +- weston_desktop_client_destroy); ++ weston_desktop_client_handle_destroy, client, ++ weston_desktop_client_handle_destroy); + else + wl_resource_set_implementation(client->resource, implementation, + client, +- weston_desktop_client_destroy); +- ++ weston_desktop_client_handle_destroy); + + display = wl_client_get_display(client->client); + loop = wl_display_get_event_loop(display); +-- +GitLab + -- cgit 1.2.3-korg