e_devicemgr: destroy the user_data only when device resource becomes inert 80/319280/1
authorduna.oh <duna.oh@samsung.com>
Mon, 21 Oct 2024 02:59:36 +0000 (11:59 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 21 Oct 2024 04:43:09 +0000 (13:43 +0900)
Commit 109c4835e2926886553de29cffe2b9cd1092d104 modified the behavior to
invoke wl_resource_destroy() rather than destroying user_data alone.
However, it'd better to rever this change since wl_resource will be destroied
after its destoy func is executed.

Change-Id: I9411dae6912cff0effa80eb2946627b0d7bdf3f6

src/bin/server/e_devicemgr_wl.c

index 00c2340a0e95128301e60429c9ed5ae7165d296a..69175b1320966d22ea1316efd86647f2f8160023 100644 (file)
@@ -86,6 +86,11 @@ _e_devicemgr_wl_device_data_destroy(E_Tizen_Devicemgr_User_Data *device_user_dat
         device_user_data->seat_destroy_listener.notify = NULL;
      }
 
+   device_user_data->seat_res = NULL;
+   device_user_data->mgr_res = NULL;
+   device_user_data->resource = NULL;
+   device_user_data->dev = NULL;
+
    E_FREE(device_user_data);
 }
 
@@ -94,7 +99,6 @@ _e_devicemgr_wl_device_cb_seat_destroy(struct wl_listener *l, void *data)
 {
    struct wl_resource *seat_resource = (struct wl_resource *)data;
    E_Tizen_Devicemgr_User_Data *device_user_data;
-   struct wl_resource *temp = NULL;
 
    DMDBG("Listener(%p) called: seat_resource: %p destroyed", l, seat_resource);
 
@@ -109,13 +113,8 @@ _e_devicemgr_wl_device_cb_seat_destroy(struct wl_listener *l, void *data)
         wl_list_remove(&device_user_data->seat_destroy_listener.link);
         device_user_data->seat_destroy_listener.notify = NULL;
      }
-   if (device_user_data->resource)
-     {
-        DMDBG("Destroy device resource. (res: %u)", wl_resource_get_id(device_user_data->resource));
-        temp = device_user_data->resource;
-        device_user_data->resource = NULL;
-        wl_resource_destroy(temp);
-     }
+
+   _e_devicemgr_wl_device_data_destroy(device_user_data); // Make inert
 }
 
 static void
@@ -123,7 +122,6 @@ _e_devicemgr_wl_device_cb_manager_destroy(struct wl_listener *l, void *data)
 {
    struct wl_resource *mgr_resource = (struct wl_resource *)data;
    E_Tizen_Devicemgr_User_Data *device_user_data;
-   struct wl_resource *temp = NULL;
 
    DMDBG("Listener(%p) called: mgr_resource: %p destroyed", l, mgr_resource);
 
@@ -138,13 +136,8 @@ _e_devicemgr_wl_device_cb_manager_destroy(struct wl_listener *l, void *data)
         wl_list_remove(&device_user_data->manager_destroy_listener.link);
         device_user_data->manager_destroy_listener.notify = NULL;
      }
-   if (device_user_data->resource)
-     {
-        DMDBG("Destroy device resource. (res: %u)", wl_resource_get_id(device_user_data->resource));
-        temp = device_user_data->resource;
-        device_user_data->resource = NULL;
-        wl_resource_destroy(temp);
-     }
+
+   _e_devicemgr_wl_device_data_destroy(device_user_data); // Make inert
 }
 
 static void
@@ -251,6 +244,7 @@ e_devicemgr_wl_device_del(E_Devicemgr_Input_Device *dev)
      {
         device_user_data = wl_resource_get_user_data(res);
         if (!device_user_data) continue;
+        if (device_user_data->dev != dev) continue;
         if (!device_user_data->mgr_res || !device_user_data->seat_res || !device_user_data->resource)
           continue;