From 37ceeeaae90771e50754c10706eec0355e7aa27e Mon Sep 17 00:00:00 2001 From: semun-lee <35090067+semun-lee@users.noreply.github.com> Date: Mon, 30 Sep 2019 10:58:09 +0900 Subject: [PATCH] [IoTConnectivity] Fix wrong callback management (#1041) * [IoTConnectivity] Fix wrong callback management Change-Id: I5f9ba403661e32f2f6ed807318cc937b8137cfc9 Signed-off-by: Semun Lee * Change id to static Change-Id: Ib6dd29d64f0c9b991c0a0bfe28f62d187b0fbd61 Signed-off-by: Semun Lee --- .../RemoteResource.cs | 32 ++++++++++------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity/RemoteResource.cs b/src/Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity/RemoteResource.cs index 6a7d1b4..d8101b1 100755 --- a/src/Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity/RemoteResource.cs +++ b/src/Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity/RemoteResource.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.Collections.Concurrent; using System.Net; using System.Runtime.InteropServices; using System.Threading.Tasks; @@ -37,8 +38,8 @@ namespace Tizen.Network.IoTConnectivity private bool _cacheEnabled = false; private ResourceOptions _options; - private int _responseCallbackId = 1; - private static Dictionary _responseCallbacksMap = new Dictionary(); + private static int _responseCallbackId = 1; + private static IDictionary _responseCallbacksMap = new ConcurrentDictionary(); private Interop.IoTConnectivity.Client.RemoteResource.CachedRepresentationChangedCallback _cacheUpdatedCallback; private Interop.IoTConnectivity.Client.RemoteResource.StateChangedCallback _stateChangedCallback; @@ -404,10 +405,8 @@ namespace Tizen.Network.IoTConnectivity _responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) => { IntPtr responseCallbackId = userData; - lock(_responseCallbacksMap) - { - _responseCallbacksMap.Remove(responseCallbackId); - } + + _responseCallbacksMap.Remove(responseCallbackId); if (responseHandle != IntPtr.Zero) { @@ -459,10 +458,9 @@ namespace Tizen.Network.IoTConnectivity _responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) => { IntPtr responseCallbackId = userData; - lock (_responseCallbacksMap) - { - _responseCallbacksMap.Remove(responseCallbackId); - } + + _responseCallbacksMap.Remove(responseCallbackId); + if (err == (int)(IoTConnectivityError.Iotivity)) { RemoteResponse response = new RemoteResponse(); @@ -519,10 +517,9 @@ namespace Tizen.Network.IoTConnectivity _responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) => { IntPtr responseCallbackId = userData; - lock (_responseCallbacksMap) - { - _responseCallbacksMap.Remove(responseCallbackId); - } + + _responseCallbacksMap.Remove(responseCallbackId); + if (responseHandle != IntPtr.Zero) { try @@ -570,10 +567,9 @@ namespace Tizen.Network.IoTConnectivity _responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) => { IntPtr responseCallbackId = userData; - lock (_responseCallbacksMap) - { - _responseCallbacksMap.Remove(responseCallbackId); - } + + _responseCallbacksMap.Remove(responseCallbackId); + if (err == (int)(IoTConnectivityError.Iotivity)) { RemoteResponse response = new RemoteResponse(); -- 2.7.4