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 <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
static int check_for_evdev(void)
{
SDL_SysWMinfo info;
static int check_for_evdev(void)
{
SDL_SysWMinfo info;
+ XkbDescPtr desc = NULL;
SDL_VERSION(&info.version);
SDL_VERSION(&info.version);
- if (!SDL_GetWMInfo(&info))
+ if (!SDL_GetWMInfo(&info)) {
desc = XkbGetKeyboard(info.info.x11.display,
XkbGBN_AllComponentsMask,
XkbUseCoreKbd);
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
return has_evdev;
}
#else