From c4bdb8637cae6723909c5d2563836e0169bf7a52 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Thu, 2 Nov 2023 16:44:01 +0900 Subject: [PATCH] [NUI] Do not register when BaseHandle doesn't have body If BaseHandle doesn't have body, the refCPtr value is IntPtr.Zero. If than, the various cases have wrong registration in future. To avoid this case, let we ignore to register to registry, and make BaseHandle.registerMe value as false. Signed-off-by: Eunki, Hong --- src/Tizen.NUI/src/internal/Common/Registry.cs | 19 +++++++++++++------ src/Tizen.NUI/src/public/Common/BaseHandle.cs | 15 ++++++++++++--- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Tizen.NUI/src/internal/Common/Registry.cs b/src/Tizen.NUI/src/internal/Common/Registry.cs index d62fe60..7f9d0f1 100755 --- a/src/Tizen.NUI/src/internal/Common/Registry.cs +++ b/src/Tizen.NUI/src/internal/Common/Registry.cs @@ -51,11 +51,18 @@ namespace Tizen.NUI /// Stores the mapping between this instance of BaseHandle (C# base class) and native part. /// /// The instance of BaseHandle (C# base class). - internal static void Register(BaseHandle baseHandle) + /// True if we success to register. False otherwise. + internal static bool Register(BaseHandle baseHandle) { // We store a pointer to the RefObject for the control IntPtr refCptr = Interop.BaseHandle.GetObjectPtr(baseHandle.GetBaseHandleCPtrHandleRef); + if (refCptr == IntPtr.Zero) + { + Tizen.Log.Error("NUI", $"We try to register BaseHandle dont have body! input type:{baseHandle.GetType()}\n"); + return false; + } + RegistryCurrentThreadCheck(); if (Instance._controlMap.TryAdd(refCptr, new WeakReference(baseHandle, true)) != true) @@ -69,7 +76,7 @@ namespace Tizen.NUI // 2023-10-30 : Just print error log without exception. Please reopne below throw action after all apps fixed. Tizen.Log.Fatal("NUI", "Error! just return here without Register! this can cause unknown error or crash in next step"); - return; + return false; //throw new System.InvalidOperationException("Error! NUI Registry weakReference should not be NULL!"); } var target = weakReference.Target; @@ -88,7 +95,7 @@ namespace Tizen.NUI // 2023-10-30 : Just print error log without exception. Please reopne below throw action after all apps fixed. Tizen.Log.Fatal("NUI", "Error! just return here without Register! this can cause unknown error or crash in next step"); - return; + return false; //throw new System.InvalidOperationException("refCptr register failed"); } } @@ -98,7 +105,7 @@ namespace Tizen.NUI // 2023-10-30 : Just print error log without exception. Please reopne below throw action after all apps fixed. Tizen.Log.Fatal("NUI", "Error! just return here without Register! this can cause unknown error or crash in next step"); - return; + return false; //throw new System.InvalidOperationException("refCptr is already exist!"); } } @@ -108,13 +115,13 @@ namespace Tizen.NUI // 2023-10-30 : Just print error log without exception. Please reopne below throw action after all apps fixed. Tizen.Log.Fatal("NUI", "Error! just return here without Register! this can cause unknown error or crash in next step"); - return; + return false; //throw new System.InvalidOperationException("refCptr is already exist, but fail to get handle!"); } } NUILog.Debug($"[Registry] Register! type:{baseHandle.GetType()} count:{Instance._controlMap.Count} copyNativeHandle:{baseHandle.GetBaseHandleCPtrHandleRef.Handle.ToString("X8")}"); - return; + return true; } /// diff --git a/src/Tizen.NUI/src/public/Common/BaseHandle.cs b/src/Tizen.NUI/src/public/Common/BaseHandle.cs index 2729cb9..1bff524 100755 --- a/src/Tizen.NUI/src/public/Common/BaseHandle.cs +++ b/src/Tizen.NUI/src/public/Common/BaseHandle.cs @@ -91,7 +91,10 @@ namespace Tizen.NUI if (registerMe) { // Register this instance of BaseHandle in the registry. - Registry.Register(this); + if (!Registry.Register(this)) + { + registerMe = false; + } } disposeDebuggingCtor(); @@ -113,7 +116,10 @@ namespace Tizen.NUI if (registerMe) { // Register this instance of BaseHandle in the registry. - Registry.Register(this); + if (!Registry.Register(this)) + { + registerMe = false; + } } disposeDebuggingCtor(); @@ -133,7 +139,10 @@ namespace Tizen.NUI if (registerMe) { // Register this instance of BaseHandle in the registry. - Registry.Register(this); + if (!Registry.Register(this)) + { + registerMe = false; + } } disposeDebuggingCtor(); -- 2.7.4