e_xdg_shell: modify code to remove oldest configure resource 80/279080/1 accepted/tizen/unified/20220802.144807 submit/tizen/20220802.023045
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 2 Aug 2022 01:25:03 +0000 (10:25 +0900)
committerJunseok Kim <juns.kim@samsung.com>
Tue, 2 Aug 2022 02:24:04 +0000 (11:24 +0900)
There is a possibility that the size of the configure resource is increased continuously
if an app doesn't send configure_ack reqeust after it get the configure event.
To prevent continuous resource size increase, we remove the oldest configure resource
from the waiting configure_ack list if the number of list exceeds a specific number.

Change-Id: Ia882cf5ea5be06574822ff4b3fdb627af6db70ab

src/bin/e_xdg_shell_v6.c

index 07be2d1..a5fc311 100644 (file)
@@ -14,6 +14,8 @@
 #define e_xdg_surface_role_biggest_struct E_Xdg_Toplevel
 #define E_XDG_SURFACE_V6_TYPE (int)0xE0b06000
 
+const int WAIT_ACK_COUNT_MAX = 16;
+
 typedef enum   _E_Xdg_Surface_Role        E_Xdg_Surface_Role;
 typedef struct _E_Xdg_Size                E_Xdg_Size;
 typedef struct _E_Xdg_Shell               E_Xdg_Shell;
@@ -1174,7 +1176,21 @@ _e_xdg_surface_cb_configure_send(void *data)
        _e_xdg_surface_util_role_string_get(exsurf), configure->serial);
 
    if (wait_ack)
-     exsurf->configure_list = eina_list_append(exsurf->configure_list, configure);
+     {
+        if (eina_list_count(exsurf->configure_list) > WAIT_ACK_COUNT_MAX)
+          {
+             E_Xdg_Surface_Configure *oldest_configure = NULL;
+             oldest_configure = eina_list_nth(exsurf->configure_list, 0);
+             if (oldest_configure)
+               {
+                  ELOGF("XDG6", "Don't receive Configure Ack. Remove oldest configure:%p, serial:%d",
+                        exsurf->ec, oldest_configure, oldest_configure->serial);
+                  exsurf->configure_list = eina_list_remove(exsurf->configure_list, oldest_configure);
+                  E_FREE(oldest_configure);
+               }
+          }
+        exsurf->configure_list = eina_list_append(exsurf->configure_list, configure);
+     }
    else
      E_FREE(configure);