input: fix missing lock 23/317823/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 2 Sep 2024 02:15:14 +0000 (11:15 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 19 Sep 2024 05:30:33 +0000 (14:30 +0900)
Change-Id: I79376d8830a9683c0e7f14cfe605735cf7685f7d
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/inputmgr/e_keyrouter.c
src/bin/server/e_comp_wl_input.c

index 7ce83da..2fa7c8a 100644 (file)
@@ -466,7 +466,9 @@ e_keyrouter_query_tizen_key_table(void)
         KLINF("Server create a new cache file: %s", e_comp_wl_input_keymap_path_get(names));
         res = unlink(e_comp_wl_input_keymap_path_get(names));
 
+        g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
         e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, xkb_context_ref(e_comp_input_key->xkb.context), xkb_keymap_ref(e_comp_input_key->xkb.keymap));
+        g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
      }
    else
      KLINF("Currently cache file is exist. Do not change it.");
index d780dce..b61a9af 100644 (file)
@@ -1879,7 +1879,9 @@ e_comp_wl_input_keyboard_state_update(uint32_t keycode, Eina_Bool pressed)
    if (pressed) dir = XKB_KEY_DOWN;
    else dir = XKB_KEY_UP;
 
+   g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
    atomic_store(&e_comp_input_key->kbd.mod_changed, xkb_state_update_key(e_comp_input_key->xkb.state, keycode + 8, dir));
+   g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
 
    e_comp_wl_input_keyboard_modifiers_update();
 }
@@ -2258,7 +2260,6 @@ _e_comp_wl_input_keymap_keysym_to_keycode(struct xkb_keymap *keymap, xkb_keysym_
 E_API int
 e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
 {
-   struct xkb_keymap *keymap = NULL;
    xkb_keysym_t keysym = 0x0;
    int keycode = 0;
    char *name_tmp;
@@ -2266,11 +2267,6 @@ e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
    EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0);
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl_get(), 0);
 
-   g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
-   keymap = e_comp_input_key->xkb.keymap;
-   g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
-   EINA_SAFETY_ON_NULL_GOTO(keymap, finish);
-
    keysym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
    if (keysym == XKB_KEY_NoSymbol)
      {
@@ -2289,7 +2285,12 @@ e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
      }
 
    g_rec_mutex_lock(&e_comp_input_key->xkb.keymap_mutex);
-   keycode = _e_comp_wl_input_keymap_keysym_to_keycode(keymap, keysym);
+   if (!e_comp_input_key->xkb.keymap)
+     {
+        g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
+        goto finish;
+     }
+   keycode = _e_comp_wl_input_keymap_keysym_to_keycode(e_comp_input_key->xkb.keymap, keysym);
    g_rec_mutex_unlock(&e_comp_input_key->xkb.keymap_mutex);
 
    return keycode;