From: jeremy-jang <35089715+jeremy-jang@users.noreply.github.com> Date: Tue, 14 Apr 2020 05:34:45 +0000 (+0900) Subject: [Packagemanager] Do not catch the exception thrown by event handler of app (#1540) X-Git-Tag: accepted/tizen/unified/20210219.040944~785 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d432f5e8445a1777037b17ea2762fef832cdbcc5;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [Packagemanager] Do not catch the exception thrown by event handler of app (#1540) * [Packagemanager] Fix exception handling when invoking app's event handlers Invoke the registered event handlers one by one in try-catch block to invoking all event handlers whether exception occurred at one of event handlers. Change-Id: Id2f6d9815ddbb43867a11cab9423384c6614b848 Signed-off-by: Sangyoon Jang * [Packagemanager] Fix invoking event handlers as thread-safely Change-Id: I21e2ff25726d6a4a24453e351dd64ecd47bdece4 Signed-off-by: Sangyoon Jang * [Packagemanager] Do not catch the exception thrown by event handler of app The applications should be responsible its exception, they should determine handle or not the exception. Change-Id: Ifffb4a14aa920eae905f6ff76f3a887d06e579b8 Signed-off-by: Sangyoon Jang --- diff --git a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs index 29bfc2d..df613b4 100755 --- a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs +++ b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageManager.cs @@ -1193,33 +1193,43 @@ namespace Tizen.Applications private static void InternalEventCallback(string packageType, string packageId, Interop.PackageManager.EventType eventType, Interop.PackageManager.PackageEventState eventState, int progress, Interop.PackageManager.ErrorCode error, IntPtr user_data) { + PackageManagerEventArgs args; try { + args = new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress); + } + catch (Exception e) + { + Log.Warn(LogTag, e.Message); + return; + } + + EventHandler handlers = null; + lock (s_pkgEventLock) + { if (eventType == Interop.PackageManager.EventType.Install) { - s_installEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + handlers = s_installEventHandler; } else if (eventType == Interop.PackageManager.EventType.Uninstall) { - s_uninstallEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + handlers = s_uninstallEventHandler; } else if (eventType == Interop.PackageManager.EventType.Update) { - s_updateEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + handlers = s_updateEventHandler; } else if (eventType == Interop.PackageManager.EventType.Move) { - s_moveEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + handlers = s_moveEventHandler; } else if (eventType == Interop.PackageManager.EventType.ClearData) { - s_clearDataEventHandler?.Invoke(null, new PackageManagerEventArgs(packageType, packageId, (PackageEventState)eventState, progress)); + handlers = s_clearDataEventHandler; } } - catch (Exception e) - { - Log.Warn(LogTag, e.Message); - } + + handlers?.Invoke(null, args); } private static void UnregisterPackageManagerEventIfNeeded()