e_seat: add a check if resource is keyboard before getting user_data of E_Seat 37/325237/2
authorduna.oh <duna.oh@samsung.com>
Thu, 5 Jun 2025 02:45:02 +0000 (11:45 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 5 Jun 2025 06:13:29 +0000 (06:13 +0000)
Change-Id: I0024b075106a2b3135e71e172cd9f4fd063dda45

src/bin/server/e_seat.c

index 9d8dddb08179efc5af7ec3c3dcc4554633eeb4a0..f10dc21a23bd5e3d8a057fa132a95f8faaa711b7 100644 (file)
@@ -353,6 +353,8 @@ _e_seat_get_resource(struct wl_resource *resource, void *data)
    Eina_List *l, *ll;
    struct wl_resource *res;
    E_Seat *seat;
+
+   if (!e_seat_keyboard_check(resource)) return WL_ITERATOR_CONTINUE;
    seat = wl_resource_get_user_data(resource);
    if (!seat) return WL_ITERATOR_CONTINUE;
 
@@ -368,6 +370,8 @@ _e_seat_get_resource(struct wl_resource *resource, void *data)
      }
    g_rec_mutex_unlock(&seat->kbd.focused_mutex);
 
+   wl_resource_set_user_data(resource, NULL);
+
    return WL_ITERATOR_CONTINUE;
 }
 
@@ -634,14 +638,18 @@ e_seat_destroy(E_Seat *seat)
 
    E_FREE(seat->name);
 
-   g_rec_mutex_clear(&seat->kbd.resources_mutex);
-   g_rec_mutex_clear(&seat->kbd.focused_mutex);
-
    wl_array_release(&seat->kbd.keys);
 
+   g_rec_mutex_lock(&seat->kbd.resources_mutex);
    EINA_LIST_FREE(seat->kbd.resources, res)
       wl_resource_destroy(res);
    seat->kbd.resources = eina_list_free(seat->kbd.resources);
+   g_rec_mutex_unlock(&seat->kbd.resources_mutex);
+
+   g_rec_mutex_lock(&seat->kbd.focused_mutex);
+   seat->kbd.focused = eina_list_free(seat->kbd.focused);
+   g_rec_mutex_unlock(&seat->kbd.focused_mutex);
+
    EINA_LIST_FREE(seat->ptr.resources, res)
       wl_resource_destroy(res);
    EINA_LIST_FREE(seat->touch.resources, res)
@@ -652,6 +660,9 @@ e_seat_destroy(E_Seat *seat)
    _seats = eina_list_remove(_seats, seat);
    wl_global_destroy(seat->global);
 
+   g_rec_mutex_clear(&seat->kbd.resources_mutex);
+   g_rec_mutex_clear(&seat->kbd.focused_mutex);
+
    E_FREE(seat);
 }