e_keyrouter: add missing keygrab mutex 13/298113/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 31 Aug 2023 00:42:32 +0000 (09:42 +0900)
committerJunSeok Kim <juns.kim@samsung.com>
Fri, 1 Sep 2023 04:36:54 +0000 (04:36 +0000)
Change-Id: I068c75900ccbf6d3ff4d50c7d3456a870183985d
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_keyrouter_events.c

index 8de7a51..41f36bc 100644 (file)
@@ -627,6 +627,7 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
 
    E_Keyrouter_Key_List_NodePtr key_node_data;
    Eina_List *l = NULL;
+   Eina_List *shared_ptr_list = NULL;
 
    ec_focus = e_client_focused_get();
    surface_focus = e_keyrouter_util_get_surface_from_eclient(ec_focus);
@@ -732,7 +733,11 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
        goto need_shared;
      }
 
-   if (krt->HardKeys[keycode].shared_ptr)
+   g_mutex_lock(&krt->grab_key_mutex);
+   shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+   g_mutex_unlock(&krt->grab_key_mutex);
+
+   if (shared_ptr_list)
      {
 need_shared:
         res = _e_keyrouter_send_key_events_focus(type, surface_focus, ev, dev, &delivered_surface);
@@ -746,7 +751,10 @@ need_shared:
           }
         if (res)
           {
-             EINA_LIST_FOREACH(krt->HardKeys[keycode].shared_ptr, l, key_node_data)
+             g_mutex_lock(&krt->grab_key_mutex);
+             shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+             g_mutex_unlock(&krt->grab_key_mutex);
+             EINA_LIST_FOREACH(shared_ptr_list, l, key_node_data)
                {
                   if (key_node_data)
                     {
@@ -860,7 +868,9 @@ _e_keyrouter_check_top_visible_window(E_Client *ec_focus, int arr_idx)
                {
                   if (ec_top == e_client_from_surface_resource(key_node_data->surface))
                     {
+                       g_mutex_lock(&krt->grab_key_mutex);
                        krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(krt->HardKeys[arr_idx].top_ptr, l);
+                       g_mutex_unlock(&krt->grab_key_mutex);
                        KLDBG("Move a client(e_client: %p, wl_surface: %p) to first index of list(key: %d)",
                                 ec_top, key_node_data->surface, arr_idx);
                        return EINA_TRUE;