diff options
author | senthil.gs@samsung.com <senthil.gs@samsung.com> | 2019-12-17 11:10:07 +0530 |
---|---|---|
committer | Sudipto Bal <sudipto.bal@samsung.com> | 2020-01-06 05:43:15 +0000 |
commit | 35f6be96d2aeab72e41c654c525d3d342f1ea554 (patch) | |
tree | 473ea89c0081e9ebabbd5e87a7b2e698f1f70143 | |
parent | 0b3468590b08bfb8d617b4e207988dd27ddc7ad1 (diff) | |
download | iotivity-35f6be96d2aeab72e41c654c525d3d342f1ea554.tar.gz iotivity-35f6be96d2aeab72e41c654c525d3d342f1ea554.tar.bz2 iotivity-35f6be96d2aeab72e41c654c525d3d342f1ea554.zip |
Bug fix in set/unset adapter state change callback. (#640)
A bug was introduced in a recent patch to reduce code complexity,
This patch fixes the issue.
https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/commit/9a8ff7f20185944857848c6345f87d40ddcd0e87
(cherry-picked from 9a8ff7f20185944857848c6345f87d40ddcd0e87)
Change-Id: I5b15b5ed3bd70e8c81885b7208eba3fbf5ee3330
Signed-off-by: Senthil Kumar G S <senthil.gs@samsung.com>
Signed-off-by: Sudipto <sudipto.bal@samsung.com>
5 files changed, 18 insertions, 14 deletions
diff --git a/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c index 05cddc7bd..50d66de7c 100644 --- a/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c @@ -136,12 +136,12 @@ static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status) CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback, CATransportAdapter_t adapter) { - return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList); + return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, &g_adapterCallbackList); } CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter) { - return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList); + return CAIPUnSetNetworkMonitorCallbackInternal(adapter, &g_adapterCallbackList); } u_arraylist_t *CAFindInterfaceChange() diff --git a/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c index 1fcb957bf..9203401f4 100644 --- a/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c +++ b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c @@ -54,7 +54,7 @@ void CAIPPassNetworkChangesToAdapterInternal(CANetworkStatus_t status, } CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback callback, - CATransportAdapter_t adapter, CAIPCBData_t *adapterCallbackList) + CATransportAdapter_t adapter, CAIPCBData_t **adapterCallbackList) { if (!callback) { @@ -63,7 +63,8 @@ CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback } CAIPCBData_t *cbitem = NULL; - LL_FOREACH(adapterCallbackList, cbitem) + CAIPCBData_t *list = *adapterCallbackList; + LL_FOREACH(list, cbitem) { if (cbitem && adapter == cbitem->adapter && callback == cbitem->callback) { @@ -81,22 +82,25 @@ CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback cbitem->adapter = adapter; cbitem->callback = callback; - LL_APPEND(adapterCallbackList, cbitem); + LL_APPEND(list, cbitem); + *adapterCallbackList = list; return CA_STATUS_OK; } CAResult_t CAIPUnSetNetworkMonitorCallbackInternal(CATransportAdapter_t adapter, - CAIPCBData_t *adapterCallbackList) + CAIPCBData_t **adapterCallbackList) { CAIPCBData_t *cbitem = NULL; CAIPCBData_t *tmpCbitem = NULL; - LL_FOREACH_SAFE(adapterCallbackList, cbitem, tmpCbitem) + CAIPCBData_t *list = *adapterCallbackList; + LL_FOREACH_SAFE(list, cbitem, tmpCbitem) { if (cbitem && adapter == cbitem->adapter) { OIC_LOG(DEBUG, TAG, "remove specific callback"); - LL_DELETE(adapterCallbackList, cbitem); + LL_DELETE(list, cbitem); + *adapterCallbackList = list; OICFree(cbitem); return CA_STATUS_OK; } diff --git a/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h index 949d0fa92..110c62364 100644 --- a/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h +++ b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h @@ -49,10 +49,10 @@ void CAIPPassNetworkChangesToAdapterInternal(CANetworkStatus_t status, CAIPCBData_t *adapterCallbackList, CAIPAdapterPlatform_t platform); CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback callback, - CATransportAdapter_t adapter, CAIPCBData_t *adapterCallbackList); + CATransportAdapter_t adapter, CAIPCBData_t **adapterCallbackList); CAResult_t CAIPUnSetNetworkMonitorCallbackInternal(CATransportAdapter_t adapter, - CAIPCBData_t *adapterCallbackList); + CAIPCBData_t **adapterCallbackList); #ifdef __cplusplus } diff --git a/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c index 39fc25772..b93ea8dbf 100644 --- a/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c @@ -234,12 +234,12 @@ static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status) CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback, CATransportAdapter_t adapter) { - return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList); + return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, &g_adapterCallbackList); } CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter) { - return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList); + return CAIPUnSetNetworkMonitorCallbackInternal(adapter, &g_adapterCallbackList); } static CAInterface_t *CANewInterfaceItem(int index, const char *name, int family, diff --git a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c index 036b0f18c..348634312 100644 --- a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c @@ -89,12 +89,12 @@ static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status) CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback, CATransportAdapter_t adapter) { - return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList); + return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, &g_adapterCallbackList); } CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter) { - return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList); + return CAIPUnSetNetworkMonitorCallbackInternal(adapter, &g_adapterCallbackList); } u_arraylist_t *CAFindInterfaceChange() |