weston-info: destroy wl_keyboard
authorMarkus Ongyerth <wl@ongy.net>
Mon, 30 Apr 2018 09:35:50 +0000 (11:35 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 29 May 2018 10:34:46 +0000 (13:34 +0300)
Fixes a memory leak by calling wl_keyboard_destroy on any keyboard
that was used to listen for events.

Signed-off-by: Markus Ongyerth <wl@ongy.net>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
clients/weston-info.c

index 6606117..609e270 100644 (file)
@@ -118,6 +118,7 @@ struct seat_info {
        struct wl_seat *seat;
        struct weston_info *info;
 
+       struct wl_keyboard *keyboard;
        uint32_t capabilities;
        char *name;
 
@@ -498,10 +499,8 @@ seat_handle_capabilities(void *data, struct wl_seat *wl_seat,
                return;
 
        if (caps & WL_SEAT_CAPABILITY_KEYBOARD) {
-               struct wl_keyboard *keyboard;
-
-               keyboard = wl_seat_get_keyboard(seat->seat);
-               wl_keyboard_add_listener(keyboard, &keyboard_listener,
+               seat->keyboard = wl_seat_get_keyboard(seat->seat);
+               wl_keyboard_add_listener(seat->keyboard, &keyboard_listener,
                                         seat);
 
                seat->info->roundtrip_needed = true;
@@ -531,6 +530,9 @@ destroy_seat_info(void *data)
        if (seat->name != NULL)
                free(seat->name);
 
+       if (seat->keyboard)
+               wl_keyboard_destroy(seat->keyboard);
+
        wl_list_remove(&seat->global_link);
 }