Resolve registry issue for RenderTaskList
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 17 Oct 2023 06:24:58 +0000 (15:24 +0900)
committerEunki Hong <h.pichulia@gmail.com>
Tue, 31 Oct 2023 14:07:28 +0000 (23:07 +0900)
After patch #5595 merged, there was some hidden bugs occured.
This PR is one of portential bug fix.

Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
src/Tizen.NUI/src/internal/Common/RenderTaskList.cs
src/Tizen.NUI/src/public/Window/Window.cs

index 987e840..f47c59a 100755 (executable)
@@ -17,6 +17,7 @@
 
 using System;
 using System.ComponentModel;
+using System.Runtime.InteropServices;
 
 namespace Tizen.NUI
 {
@@ -95,7 +96,20 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         public RenderTask GetTask(uint index)
         {
-            RenderTask ret = new RenderTask(Interop.RenderTask.RenderTaskListGetTask(SwigCPtr, index), true);
+            global::System.IntPtr cPtr = Interop.RenderTask.RenderTaskListGetTask(SwigCPtr, index);
+
+            RenderTask ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as RenderTask;
+            if (ret != null)
+            {
+                HandleRef CPtr = new HandleRef(this, cPtr);
+                Interop.BaseHandle.DeleteBaseHandle(CPtr);
+                CPtr = new HandleRef(null, global::System.IntPtr.Zero);
+            }
+            else
+            {
+                ret = new RenderTask(cPtr, true);
+            }
+
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             return ret;
         }
index 36d6000..12eff27 100755 (executable)
@@ -1554,7 +1554,20 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         public RenderTaskList GetRenderTaskList()
         {
-            RenderTaskList ret = new RenderTaskList(Interop.Stage.GetRenderTaskList(stageCPtr), true);
+            global::System.IntPtr cPtr = Interop.Stage.GetRenderTaskList(stageCPtr);
+
+            RenderTaskList ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as RenderTaskList;
+            if (ret != null)
+            {
+                HandleRef CPtr = new HandleRef(this, cPtr);
+                Interop.BaseHandle.DeleteBaseHandle(CPtr);
+                CPtr = new HandleRef(null, global::System.IntPtr.Zero);
+            }
+            else
+            {
+                ret = new RenderTaskList(cPtr, true);
+            }
+
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             return ret;
         }