From fcec9fcd3958f10d822c511b30d92e55b3491d23 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Fri, 20 Sep 2019 10:10:37 +0200 Subject: [PATCH] core: fix memory leak in _draw_callback Fixes the following memory leak reported by valgrind: 992 bytes in 31 blocks are definitely lost in loss record 81 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 0x118094: _draw_callback (compton.c:1335) 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) by 0x11B005: main (compton.c:2308) To prevent accidentaly reusing the freed structure, wrap it in a lexical scope. --- src/compton.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/compton.c b/src/compton.c index 8a544bc..d927674 100644 --- a/src/compton.c +++ b/src/compton.c @@ -1332,9 +1332,12 @@ static void _draw_callback(EV_P_ session_t *ps, int revents attr_unused) { // Call fill_win on new windows handle_new_windows(ps); - auto r = xcb_get_input_focus_reply(ps->c, xcb_get_input_focus(ps->c), NULL); - if (!ps->active_win || (r && r->focus != ps->active_win->base.id)) { - recheck_focus(ps); + { + auto r = xcb_get_input_focus_reply(ps->c, xcb_get_input_focus(ps->c), NULL); + if (!ps->active_win || (r && r->focus != ps->active_win->base.id)) { + recheck_focus(ps); + } + free(r); } // Refresh pixmaps