ecore_wl_input: fix memory leaks 16/169316/1
authorJengHyun Kang <jhyuni.kang@samsung.com>
Tue, 6 Feb 2018 02:48:50 +0000 (11:48 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Tue, 6 Feb 2018 02:49:20 +0000 (11:49 +0900)
Change-Id: Iecac627edf2ccc095e1eea6902c14e71ba513fa1

src/lib/ecore_wayland/ecore_wl_input.c

index 30b2685..1daa6f2 100644 (file)
@@ -634,7 +634,7 @@ _ecore_wl_input_del(Ecore_Wl_Input *input)
 
    EINA_LIST_FREE(input->devices, dev)
      {
-        if (dev->tz_device) tizen_input_device_destroy(dev->tz_device);
+        if (dev->tz_device) tizen_input_device_release(dev->tz_device);
         if (dev->name) eina_stringshare_del(dev->name);
         if (dev->identifier) eina_stringshare_del(dev->identifier);
         dev->seat = NULL;
@@ -902,6 +902,8 @@ _ecore_wl_input_cb_keyboard_keymap(void *data, struct wl_keyboard *keyboard EINA
         return;
      }
 
+   if (input->xkb.keymap) xkb_map_unref(input->xkb.keymap);
+
    input->xkb.keymap =
      xkb_map_new_from_string(input->display->xkb.context, map,
                              XKB_KEYMAP_FORMAT_TEXT_V1, 0);
@@ -910,6 +912,7 @@ _ecore_wl_input_cb_keyboard_keymap(void *data, struct wl_keyboard *keyboard EINA
    close(fd);
 
    if (!(input->xkb.keymap)) return;
+   if (input->xkb.state) xkb_state_unref(input->xkb.state);
    if (!(input->xkb.state = xkb_state_new(input->xkb.keymap)))
      {
         xkb_map_unref(input->xkb.keymap);
@@ -941,6 +944,7 @@ _ecore_wl_input_cb_keyboard_keymap(void *data, struct wl_keyboard *keyboard EINA
    if (!_ecore_wl_input_keymap_update_send(input))
      {
         xkb_map_unref(input->xkb.keymap);
+        xkb_state_unref(input->xkb.state);
         input->xkb.keymap = NULL;
         return;
      }