e_desk_area: Add missing mutex lock/unlock of accessing ec inlist 93/315993/1
authorJunseok Kim <juns.kim@samsung.com>
Fri, 6 Dec 2024 07:10:40 +0000 (16:10 +0900)
committerJunSeok Kim <juns.kim@samsung.com>
Mon, 9 Dec 2024 04:54:05 +0000 (04:54 +0000)
Change-Id: I75c1dd4199345534bfe70bef5825067aa5dc005f

src/bin/core/e_desk_area.c

index 1facb36e7ee893a0f49a2cd90412a96963f239d6..1a9054d70c1afbb4d67a5e31988c1c0ddd7c341f 100644 (file)
@@ -823,6 +823,7 @@ _desk_area_cb_client_get_above(struct wl_listener *listener, void *data)
    eda = eda_client->eda;
    ec = eda_client->ec;
 
+   e_comp_ec_list_lock();
    if (EINA_INLIST_GET(ec)->next) //check current layer
      {
         EINA_INLIST_FOREACH(EINA_INLIST_GET(ec)->next, ec2)
@@ -835,10 +836,12 @@ _desk_area_cb_client_get_above(struct wl_listener *listener, void *data)
              if (!e_object_is_del(E_OBJECT(ec2)))
                {
                   get_above_data->above_ec = ec2;
+                  e_comp_ec_list_unlock();
                   return;
                }
           }
      }
+   e_comp_ec_list_unlock();
 
    if (ec->layer == E_LAYER_CLIENT_CURSOR) return;
    if (e_util_client_layer_map(ec->layer) == 9999) return;
@@ -886,6 +889,7 @@ _desk_area_cb_client_get_below(struct wl_listener *listener, void *data)
    eda = eda_client->eda;
    ec = eda_client->ec;
 
+   e_comp_ec_list_lock();
    if (EINA_INLIST_GET(ec)->prev) //check current layer
      {
         for (l = EINA_INLIST_GET(ec)->prev; l; l = l->prev)
@@ -899,10 +903,12 @@ _desk_area_cb_client_get_below(struct wl_listener *listener, void *data)
              if (!e_object_is_del(E_OBJECT(ec2)))
                {
                   get_below_data->below_ec = ec2;
+                  e_comp_ec_list_unlock();
                   return;
                }
           }
      }
+   e_comp_ec_list_unlock();
 
    // check layer validation
    ec_layer = ec->layer;
@@ -967,6 +973,7 @@ _desk_area_cb_client_get_visible_above(struct wl_listener *listener, void *data)
    eda = eda_client->eda;
    ec = eda_client->ec;
 
+   e_comp_ec_list_lock();
    if (EINA_INLIST_GET(ec)->next) //check current layer
      {
         EINA_INLIST_FOREACH(EINA_INLIST_GET(ec)->next, ec2)
@@ -978,10 +985,12 @@ _desk_area_cb_client_get_visible_above(struct wl_listener *listener, void *data)
                  (ec2->frame))
                {
                   get_visible_above_data->above_ec = ec2;
+                  e_comp_ec_list_unlock();
                   return;
                }
           }
      }
+   e_comp_ec_list_unlock();
 
    if (ec->layer == E_LAYER_CLIENT_CURSOR) return;
    if (e_util_client_layer_map(ec->layer) == 9999) return;
@@ -1022,6 +1031,7 @@ _desk_area_cb_client_get_visible_below(struct wl_listener *listener, void *data)
    E_Layer ec_layer, ec_layer_cw;
    int cw_layer;
 
+   e_comp_ec_list_lock();
    eda_client = wl_container_of(listener, eda_client, client_get_visible_below);
    eda = eda_client->eda;
    ec = eda_client->ec;
@@ -1038,10 +1048,12 @@ _desk_area_cb_client_get_visible_below(struct wl_listener *listener, void *data)
                  (ec2->frame))
                {
                   get_visible_below_data->below_ec = ec2;
+                  e_comp_ec_list_unlock();
                   return;
                }
           }
      }
+   e_comp_ec_list_unlock();
 
    // check layer validation
    ec_layer = ec->layer;
@@ -1065,6 +1077,7 @@ _desk_area_cb_client_get_visible_below(struct wl_listener *listener, void *data)
    x = e_comp_canvas_layer_map(ec->layer);
    if (x > 0) x--;
 
+   e_comp_ec_list_lock();
    for (; x >= e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x--)
      {
         if (!eda->layers[x].clients) continue;
@@ -1077,10 +1090,12 @@ _desk_area_cb_client_get_visible_below(struct wl_listener *listener, void *data)
                  (ec2->frame))
                {
                   get_visible_below_data->below_ec = ec2;
+                  e_comp_ec_list_unlock();
                   return;
                }
           }
      }
+   e_comp_ec_list_unlock();
 }
 
 static void