summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsenthil.gs@samsung.com <senthil.gs@samsung.com>2019-12-17 11:10:07 +0530
committerSudipto Bal <sudipto.bal@samsung.com>2020-01-06 05:43:15 +0000
commit35f6be96d2aeab72e41c654c525d3d342f1ea554 (patch)
tree473ea89c0081e9ebabbd5e87a7b2e698f1f70143
parent0b3468590b08bfb8d617b4e207988dd27ddc7ad1 (diff)
downloadiotivity-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>
-rw-r--r--resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c4
-rw-r--r--resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c16
-rw-r--r--resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h4
-rw-r--r--resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c4
-rw-r--r--resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c4
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()