From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LtlMo-0002Tm-Ej for qemu-devel@nongnu.org; Tue, 14 Apr 2009 12:20:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LtlMj-0002SE-JQ for qemu-devel@nongnu.org; Tue, 14 Apr 2009 12:20:10 -0400 Received: from [199.232.76.173] (port=33218 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LtlMj-0002S8-EM for qemu-devel@nongnu.org; Tue, 14 Apr 2009 12:20:05 -0400 Received: from gecko.sbs.de ([194.138.37.40]:19426) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LtlMi-00057M-Jt for qemu-devel@nongnu.org; Tue, 14 Apr 2009 12:20:05 -0400 Received: from mail2.sbs.de (localhost [127.0.0.1]) by gecko.sbs.de (8.12.11.20060308/8.12.11) with ESMTP id n3EGK0fi023158 for ; Tue, 14 Apr 2009 18:20:00 +0200 Received: from [139.25.109.167] (mchn012c.mchp.siemens.de [139.25.109.167] (may be forged)) by mail2.sbs.de (8.12.11.20060308/8.12.11) with ESMTP id n3EGK02Y014118 for ; Tue, 14 Apr 2009 18:20:00 +0200 Message-ID: <49E4B7B0.3070504@siemens.com> Date: Tue, 14 Apr 2009 18:20:00 +0200 From: Jan Kiszka MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] sdl: Fix memory leakage Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel Valgrind was so kind to remark that no one bothers to release keycodes after use and that something is fishy about cleaning up the requested keyboard descriptor. With this patch applied, we no longer leak about 12k during startup. Signed-off-by: Jan Kiszka --- sdl.c | 39 +++++++++++++++++++++------------------ 1 files changed, 21 insertions(+), 18 deletions(-) diff --git a/sdl.c b/sdl.c index 03d3ab8..2822f6a 100644 --- a/sdl.c +++ b/sdl.c @@ -234,32 +234,35 @@ static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev) static int check_for_evdev(void) { SDL_SysWMinfo info; - XkbDescPtr desc; + XkbDescPtr desc = NULL; int has_evdev = 0; - const char *keycodes; + char *keycodes = NULL; SDL_VERSION(&info.version); - if (!SDL_GetWMInfo(&info)) + if (!SDL_GetWMInfo(&info)) { return 0; - + } desc = XkbGetKeyboard(info.info.x11.display, XkbGBN_AllComponentsMask, XkbUseCoreKbd); - if (desc == NULL || desc->names == NULL) - return 0; - - keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes); - if (keycodes == NULL) - fprintf(stderr, "could not lookup keycode name\n"); - else if (strstart(keycodes, "evdev", NULL)) - has_evdev = 1; - else if (!strstart(keycodes, "xfree86", NULL)) - fprintf(stderr, - "unknown keycodes `%s', please report to qemu-devel@nongnu.org\n", - keycodes); - - XkbFreeClientMap(desc, XkbGBN_AllComponentsMask, True); + if (desc && desc->names) { + keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes); + if (keycodes == NULL) { + fprintf(stderr, "could not lookup keycode name\n"); + } else if (strstart(keycodes, "evdev", NULL)) { + has_evdev = 1; + } else if (!strstart(keycodes, "xfree86", NULL)) { + fprintf(stderr, "unknown keycodes `%s', please report to " + "qemu-devel@nongnu.org\n", keycodes); + } + } + if (desc) { + XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True); + } + if (keycodes) { + XFree(keycodes); + } return has_evdev; } #else