From: Eunki, Hong Date: Thu, 2 Nov 2023 07:44:01 +0000 (+0900) Subject: [NUI] Do not register when BaseHandle doesn't have body X-Git-Tag: submit/tizen/20231106.113709~1^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ef96bb43de2d334dd250fb903c13a357b19e938;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [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 --- diff --git a/src/Tizen.NUI/src/internal/Common/Registry.cs b/src/Tizen.NUI/src/internal/Common/Registry.cs index d62fe6073..7f9d0f136 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 2729cb917..1bff524fc 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();