From 23421b2ff8dad03d3991997ee6c9c72c53abfc69 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Fri, 20 Sep 2019 10:13:07 +0200 Subject: [PATCH] win: fix memory leak in fill_win Fixes the following memory leak reported by valgrind: 1,056 bytes in 24 blocks are definitely lost in loss record 83 of 111 at 0x483577F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x49DB0DD: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) by 0x49D8FB4: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) by 0x49DA63E: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) by 0x49DA751: xcb_wait_for_reply (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) by 0x11FD5B: fill_win (win.c:1165) by 0x117CE6: handle_new_windows (compton.c:1266) by 0x118065: _draw_callback (compton.c:1333) by 0x1184D0: draw_callback (compton.c:1426) by 0x49BF292: ev_invoke_pending (in /usr/lib/x86_64-linux-gnu/libev.so.4.0.0) by 0x49C3344: ev_run (in /usr/lib/x86_64-linux-gnu/libev.so.4.0.0) by 0x11AD65: session_run (compton.c:2226) This one out of multiple code paths forgot to free the structure. Yeah, manual memory management is hard. :-) --- src/win.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/win.c b/src/win.c index 1c41214..9c1294d 100644 --- a/src/win.c +++ b/src/win.c @@ -1176,6 +1176,7 @@ struct win *fill_win(session_t *ps, struct win *w) { if (a->_class == XCB_WINDOW_CLASS_INPUT_ONLY) { // No need to manage this window, but we still keep it on the window stack w->managed = false; + free(a); return w; }