libweston-desktop: add weston_desktop_xwayland_fini()

This fixes the following leaks detected by ASan in
./tests/test-alpha-blending:

Direct leak of 176 byte(s) in 2 object(s) allocated from:
    #0 0x7fb447880518 in calloc (/lib/x86_64-linux-gnu/libasan.so.5+0xe9518)
    #1 0x7fb4432c12d7 in zalloc ../../git/weston/include/libweston/zalloc.h:38
    #2 0x7fb4432c2ca6 in weston_desktop_xwayland_init ../../git/weston/libweston-desktop/xwayland.c:410
    #3 0x7fb4432baadf in weston_desktop_create ../../git/weston/libweston-desktop/libweston-desktop.c:87
    #4 0x7fb4432e1e1f in wet_shell_init ../../git/weston/tests/weston-test-desktop-shell.c:224
    #5 0x7fb44775fddd in wet_load_shell ../../git/weston/compositor/main.c:956
    #6 0x7fb447770db1 in wet_main ../../git/weston/compositor/main.c:3434
    #7 0x56172c599279 in execute_compositor ../../git/weston/tests/weston-test-fixture-compositor.c:432
    #8 0x56172c59cce5 in weston_test_harness_execute_as_client ../../git/weston/tests/weston-test-runner.c:528
    #9 0x56172c58dc8c in fixture_setup ../../git/weston/tests/alpha-blending-test.c:65
    #10 0x56172c58dd31 in fixture_setup_run_ ../../git/weston/tests/alpha-blending-test.c:67
    #11 0x56172c59d29a in main ../../git/weston/tests/weston-test-runner.c:661
    #12 0x7fb4473d509a in __libc_start_main ../csu/libc-start.c:308

Indirect leak of 144 byte(s) in 2 object(s) allocated from:
    #0 0x7fb447880518 in calloc (/lib/x86_64-linux-gnu/libasan.so.5+0xe9518)
    #1 0x7fb4432bb592 in zalloc ../../git/weston/include/libweston/zalloc.h:38
    #2 0x7fb4432bb882 in weston_desktop_client_create ../../git/weston/libweston-desktop/client.c:108
    #3 0x7fb4432c2d0e in weston_desktop_xwayland_init ../../git/weston/libweston-desktop/xwayland.c:415
    #4 0x7fb4432baadf in weston_desktop_create ../../git/weston/libweston-desktop/libweston-desktop.c:87
    #5 0x7fb4432e1e1f in wet_shell_init ../../git/weston/tests/weston-test-desktop-shell.c:224
    #6 0x7fb44775fddd in wet_load_shell ../../git/weston/compositor/main.c:956
    #7 0x7fb447770db1 in wet_main ../../git/weston/compositor/main.c:3434
    #8 0x56172c599279 in execute_compositor ../../git/weston/tests/weston-test-fixture-compositor.c:432
    #9 0x56172c59cce5 in weston_test_harness_execute_as_client ../../git/weston/tests/weston-test-runner.c:528
    #10 0x56172c58dc8c in fixture_setup ../../git/weston/tests/alpha-blending-test.c:65
    #11 0x56172c58dd31 in fixture_setup_run_ ../../git/weston/tests/alpha-blending-test.c:67
    #12 0x56172c59d29a in main ../../git/weston/tests/weston-test-runner.c:661
    #13 0x7fb4473d509a in __libc_start_main ../csu/libc-start.c:308

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 3 years ago
parent f53c05d3c2
commit e2583ca084
  1. 2
      libweston-desktop/internal.h
  2. 2
      libweston-desktop/libweston-desktop.c
  3. 16
      libweston-desktop/xwayland.c

@ -240,5 +240,7 @@ weston_desktop_wl_shell_create(struct weston_desktop *desktop,
void void
weston_desktop_xwayland_init(struct weston_desktop *desktop); weston_desktop_xwayland_init(struct weston_desktop *desktop);
void
weston_desktop_xwayland_fini(struct weston_desktop *desktop);
#endif /* WESTON_DESKTOP_INTERNAL_H */ #endif /* WESTON_DESKTOP_INTERNAL_H */

@ -95,6 +95,8 @@ weston_desktop_destroy(struct weston_desktop *desktop)
if (desktop == NULL) if (desktop == NULL)
return; return;
weston_desktop_xwayland_fini(desktop);
if (desktop->wl_shell != NULL) if (desktop->wl_shell != NULL)
wl_global_destroy(desktop->wl_shell); wl_global_destroy(desktop->wl_shell);
if (desktop->xdg_shell_v6 != NULL) if (desktop->xdg_shell_v6 != NULL)

@ -423,3 +423,19 @@ weston_desktop_xwayland_init(struct weston_desktop *desktop)
compositor->xwayland = xwayland; compositor->xwayland = xwayland;
compositor->xwayland_interface = &weston_desktop_xwayland_interface; compositor->xwayland_interface = &weston_desktop_xwayland_interface;
} }
void
weston_desktop_xwayland_fini(struct weston_desktop *desktop)
{
struct weston_compositor *compositor = weston_desktop_get_compositor(desktop);
struct weston_desktop_xwayland *xwayland;
xwayland = compositor->xwayland;
weston_desktop_client_destroy(xwayland->client);
weston_layer_fini(&xwayland->layer);
free(xwayland);
compositor->xwayland = NULL;
compositor->xwayland_interface = NULL;
}

Loading…
Cancel
Save