From 82d3b8ff059dd32656d2829c65e25c09bd0ba424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 23 Feb 2024 18:37:49 +0100 Subject: [PATCH] xwayland: Call drmFreeDevice for dma-buf default feedback Fixes leaks: ==13712== 144 bytes in 1 blocks are definitely lost in loss record 4,827 of 7,462 ==13712== at 0x48459F3: calloc (vg_replace_malloc.c:1340) ==13712== by 0x49BE94D: drmDeviceAlloc (xf86drm.c:4072) ==13712== by 0x49BFAC9: drmProcessPciDevice (xf86drm.c:4104) ==13712== by 0x49BFAC9: process_device (xf86drm.c:4508) ==13712== by 0x49C35FB: drmGetDeviceFromDevId (xf86drm.c:4670) ==13712== by 0x1AD370: xwl_dmabuf_feedback_main_device (xwayland-dmabuf.c:477) ==13712== by 0x53C03FD: ffi_call_unix64 (unix64.S:104) ==13712== by 0x53BF70C: ffi_call_int (ffi64.c:673) ==13712== by 0x53BFEE2: ffi_call (ffi64.c:710) ==13712== by 0x49AC920: wl_closure_invoke (connection.c:1025) ==13712== by 0x49A8C08: dispatch_event.isra.0 (wayland-client.c:1631) ==13712== by 0x49AA5AB: dispatch_queue (wayland-client.c:1777) ==13712== by 0x49AA5AB: wl_display_dispatch_queue_pending (wayland-client.c:2019) ==13712== by 0x49AAB5E: wl_display_roundtrip_queue (wayland-client.c:1403) ==13712== 576 bytes in 4 blocks are definitely lost in loss record 6,289 of 7,462 ==13712== at 0x48459F3: calloc (vg_replace_malloc.c:1340) ==13712== by 0x49BE94D: drmDeviceAlloc (xf86drm.c:4072) ==13712== by 0x49BFAC9: drmProcessPciDevice (xf86drm.c:4104) ==13712== by 0x49BFAC9: process_device (xf86drm.c:4508) ==13712== by 0x49C35FB: drmGetDeviceFromDevId (xf86drm.c:4670) ==13712== by 0x1AD583: xwl_dmabuf_feedback_main_device (xwayland-dmabuf.c:477) ==13712== by 0x1AD583: xwl_window_dmabuf_feedback_main_device (xwayland-dmabuf.c:691) ==13712== by 0x53C03FD: ffi_call_unix64 (unix64.S:104) ==13712== by 0x53BF70C: ffi_call_int (ffi64.c:673) ==13712== by 0x53BFEE2: ffi_call (ffi64.c:710) ==13712== by 0x49AC920: wl_closure_invoke (connection.c:1025) ==13712== by 0x49A8C08: dispatch_event.isra.0 (wayland-client.c:1631) ==13712== by 0x49AA5AB: dispatch_queue (wayland-client.c:1777) ==13712== by 0x49AA5AB: wl_display_dispatch_queue_pending (wayland-client.c:2019) ==13712== by 0x1A1842: xwl_read_events (xwayland-screen.c:566) ==13712== by 0x1A1842: xwl_read_events (xwayland-screen.c:553) Fixes: 6f0b9deed668 ("xwayland: use drmDevice to compare DRM devices") Part-of: --- hw/xwayland/xwayland-dmabuf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/xwayland/xwayland-dmabuf.c b/hw/xwayland/xwayland-dmabuf.c index 8119e1ddb..0c5ed1c86 100644 --- a/hw/xwayland/xwayland-dmabuf.c +++ b/hw/xwayland/xwayland-dmabuf.c @@ -74,6 +74,7 @@ xwl_dmabuf_feedback_destroy(struct xwl_dmabuf_feedback *xwl_feedback) zwp_linux_dmabuf_feedback_v1_destroy(xwl_feedback->dmabuf_feedback); xwl_feedback->dmabuf_feedback = NULL; + drmFreeDevice(&xwl_feedback->main_dev); } static Bool @@ -474,6 +475,8 @@ xwl_dmabuf_feedback_main_device(void *data, assert(dev->size == sizeof(dev_t)); memcpy(&devid, dev->data, sizeof(dev_t)); + drmFreeDevice(&xwl_feedback->main_dev); + if (drmGetDeviceFromDevId(devid, 0, &xwl_feedback->main_dev) != 0) ErrorF("linux_dmabuf_feedback.main_device: Failed to fetch DRM device\n"); }