e_keyrouter: add mutex for key grab list 93/299293/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 25 Sep 2023 07:23:28 +0000 (16:23 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 25 Sep 2023 09:27:11 +0000 (18:27 +0900)
Change-Id: Id36d9d0c07930224820bbbd5b14af344312c5746
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_keyrouter_events.c
src/bin/e_keyrouter_list.c
src/bin/e_keyrouter_wl.c

index 41f36bc..ba34ab7 100644 (file)
@@ -172,6 +172,7 @@ _e_keyrouter_key_cancel(int keycode)
    E_Keyrouter_Key_List_NodePtr key_node_data;
    int pid = 0;
    char *pname = NULL, *cmd = NULL;
+   Eina_List *press_ptr_list = NULL;
 
    key_cancel = _e_keyrouter_key_create("Cancel");
    EINA_SAFETY_ON_NULL_RETURN(key_cancel);
@@ -182,7 +183,11 @@ _e_keyrouter_key_cancel(int keycode)
    E_FREE(keyname);
    EINA_SAFETY_ON_NULL_GOTO(key_release, failed);
 
-   EINA_LIST_FREE(krt->HardKeys[keycode].press_ptr, key_node_data)
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
+   press_ptr_list = krt->HardKeys[keycode].press_ptr;
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
+   EINA_LIST_FREE(press_ptr_list, key_node_data)
      {
         _e_keyrouter_key_send(ECORE_EVENT_KEY_DOWN, key_cancel, NULL, key_node_data);
         _e_keyrouter_key_send(ECORE_EVENT_KEY_UP, key_release, NULL, key_node_data);
@@ -198,7 +203,10 @@ _e_keyrouter_key_cancel(int keycode)
 
         E_FREE(key_node_data);
      }
+
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
    krt->HardKeys[keycode].press_ptr = NULL;
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
 
    _e_keyrouter_key_free(key_cancel);
    _e_keyrouter_key_free(key_release);
index 61a4bad..047d116 100644 (file)
@@ -444,6 +444,8 @@ _e_keyrouter_get_list(int mode, int key)
 {
    Eina_List **list = NULL;
 
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
+
    switch (mode)
      {
         case TIZEN_KEYROUTER_MODE_EXCLUSIVE:             list = &krt->HardKeys[key].excl_ptr;    break;
@@ -454,6 +456,8 @@ _e_keyrouter_get_list(int mode, int key)
         default: break;
      }
 
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
    return list;
 }
 
index 3f14be1..e475af3 100644 (file)
@@ -140,13 +140,18 @@ e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface
    struct wl_resource *resource = NULL;
    struct wl_client *wc = NULL;
    E_Keyrouter_Key_List_NodePtr data;
+   Eina_List *press_ptr_list = NULL;
 
    if (surface) wc = wl_resource_get_client(surface);
    else wc = client;
 
    EINA_SAFETY_ON_NULL_RETURN(wc);
 
-   EINA_LIST_FOREACH(krt->HardKeys[key].press_ptr, l, data)
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
+   press_ptr_list = krt->HardKeys[key].press_ptr;
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
+   EINA_LIST_FOREACH(press_ptr_list, l, data)
      {
         if (surface)
           {