[Tizen] Fix the leak of wayland resource. 57/325357/1 accepted/tizen/7.0/unified/20250611.095440
authorWonsik Jung <sidein@samsung.com>
Tue, 10 Jun 2025 00:41:15 +0000 (09:41 +0900)
committerWonsik Jung <sidein@samsung.com>
Tue, 10 Jun 2025 00:42:17 +0000 (09:42 +0900)
Fix the leak of wayland resource in tizen backend.
The related wayland resource is tizen_display_policy, tizen_policy and wl_registry.
It should be free before wl_event_queue is free.

Change-Id: I5316fef1aaa1119dea0bae92bd291f2179da798b

dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp
dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.h

index a4274b7bbdd5eb960d12655e8d77deecb5100f09..491e6d544aebe634bc3d27be34768abbd25ca508 100644 (file)
@@ -868,6 +868,7 @@ WindowBaseEcoreWl2::WindowBaseEcoreWl2(Dali::PositionSize positionSize, Any surf
   mEglWindow(nullptr),
   mDisplay(nullptr),
   mEventQueue(nullptr),
+  mDisplayRegistry(nullptr),
   mTizenPolicy(nullptr),
   mTizenDisplayPolicy(nullptr),
   mKeyMap(nullptr),
@@ -908,9 +909,40 @@ WindowBaseEcoreWl2::~WindowBaseEcoreWl2()
   }
   mEcoreEventHandler.Clear();
 
+  if(mTizenDisplayPolicy)
+  {
+    tizen_display_policy_destroy(mTizenDisplayPolicy);
+    mTizenDisplayPolicy = nullptr;
+  }
+
+  if(mTizenPolicy)
+  {
+    tizen_policy_destroy(mTizenPolicy);
+    mTizenPolicy = nullptr;
+  }
+
+  if(mDisplayRegistry)
+  {
+    wl_registry_destroy(mDisplayRegistry);
+    mDisplayRegistry = nullptr;
+  }
+
+  if(mWlInputPanel)
+  {
+    wl_proxy_destroy((struct wl_proxy*)mWlInputPanel);
+    mWlInputPanel = nullptr;
+  }
+
+  if(mWlOutput)
+  {
+    wl_output_destroy(mWlOutput);
+    mWlOutput = nullptr;
+  }
+
   if(mEventQueue)
   {
     wl_event_queue_destroy(mEventQueue);
+    mEventQueue = nullptr;
   }
 
   mSupportedAuxiliaryHints.clear();
@@ -1027,8 +1059,8 @@ void WindowBaseEcoreWl2::Initialize(PositionSize positionSize, Any surface, bool
       {
         wl_proxy_set_queue(reinterpret_cast<wl_proxy*>(displayWrapper), mEventQueue);
 
-        wl_registry* registry = wl_display_get_registry(displayWrapper);
-        wl_registry_add_listener(registry, &registryListener, this);
+        mDisplayRegistry = wl_display_get_registry(displayWrapper);
+        wl_registry_add_listener(mDisplayRegistry, &registryListener, this);
 
         // To support ECORE_WL2_EVENT_CONFORMANT_CHANGE event handler
         ecore_wl2_window_conformant_set(mEcoreWindow, true);
index c0bd1996b62501d5236fdc6bef32cc1bc516cada..b2634e7ae596250ce01a1967341bf30bb9328220 100644 (file)
@@ -652,6 +652,7 @@ private:
   wl_egl_window*        mEglWindow;
   wl_display*           mDisplay;
   wl_event_queue*       mEventQueue;
+  wl_registry*          mDisplayRegistry;
   tizen_policy*         mTizenPolicy;
   tizen_display_policy* mTizenDisplayPolicy;
   xkb_keymap*           mKeyMap;