aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2019-06-14 18:15:32 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2019-06-18 11:34:58 +0200
commit6a572877593e592dbaaba6f5649bc7744cd714c7 (patch)
treeee1582e411eac8a30913036efc3da0112a90de7c /src
parent24046bfdb0568077a074b503d58a343a06f4234a (diff)
Refactoring 'hal data' linked list
Refactoring 'hal data' linked list code using liburcu. BUG-AGL: SPEC-2329 Change-Id: Ia51d362f96838f4b5bb77e8d1b85fa8d1ab4bed1 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to 'src')
-rw-r--r--src/4a-hal-manager/4a-hal-manager-cb.c25
-rw-r--r--src/4a-hal-manager/4a-hal-manager.c7
-rw-r--r--src/4a-internals-hal/4a-internals-hal-api-loader.c2
3 files changed, 15 insertions, 19 deletions
diff --git a/src/4a-hal-manager/4a-hal-manager-cb.c b/src/4a-hal-manager/4a-hal-manager-cb.c
index 843066b..a726d05 100644
--- a/src/4a-hal-manager/4a-hal-manager-cb.c
+++ b/src/4a-hal-manager/4a-hal-manager-cb.c
@@ -87,8 +87,7 @@ void HalMgrLoaded(afb_req_t request)
return;
}
- currentHalData = halMgrData->halDataList;
- if(! currentHalData) {
+ if(cds_list_empty(&halMgrData->halDataListHead)) {
afb_req_success(request, NULL, "No Hal Api loaded");
return;
}
@@ -107,7 +106,7 @@ void HalMgrLoaded(afb_req_t request)
else
requestJsonErr = wrap_json_unpack(requestJson, "{s?:b s?:b}", "all", &allHal, "verbose", &verbose);
- while(currentHalData) {
+ cds_list_for_each_entry(currentHalData, &halMgrData->halDataListHead, node) {
if(allHal || currentHalData->status == HAL_STATUS_READY) {
// Case if request key is 'verbose' and value is bigger than 0
if(! requestJsonErr && verbose) {
@@ -151,8 +150,6 @@ void HalMgrLoaded(afb_req_t request)
json_object_array_add(requestAnswer, apiRequestedInfoJ);
}
-
- currentHalData = currentHalData->next;
}
afb_req_success(request, requestAnswer, "Requested data");
@@ -206,7 +203,7 @@ void HalMgrLoad(afb_req_t request)
return;
}
- addedHal = HalUtlAddHalToHalList(&halMgrData->halDataList);
+ addedHal = HalUtlAddHalToHalList(&halMgrData->halDataListHead);
addedHal->internal = 0;
// TBD JAI : initialize external to unavailable once event from external hal will be handled
@@ -217,7 +214,7 @@ void HalMgrLoad(afb_req_t request)
afb_req_fail(request,
"apiname_string_allocation",
"Didn't succeed to store (allocate) 'apiName' string");
- HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, addedHal);
+ HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, addedHal);
return;
}
@@ -226,7 +223,7 @@ void HalMgrLoad(afb_req_t request)
afb_req_fail(request,
"sndcardpath_string_allocation",
"Didn't succeed to store (allocate) 'sndCardPath' string");
- HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, addedHal);
+ HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, addedHal);
return;
}
@@ -236,7 +233,7 @@ void HalMgrLoad(afb_req_t request)
afb_req_fail(request,
"info_string_allocation",
"Didn't succeed to store (allocate) 'info' string");
- HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, addedHal);
+ HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, addedHal);
return;
}
}
@@ -247,7 +244,7 @@ void HalMgrLoad(afb_req_t request)
afb_req_fail(request,
"author_string_allocation",
"Didn't succeed to store (allocate) 'author' string");
- HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, addedHal);
+ HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, addedHal);
return;
}
}
@@ -258,7 +255,7 @@ void HalMgrLoad(afb_req_t request)
afb_req_fail(request,
"version_string_allocation",
"Didn't succeed to store (allocate) 'version' string");
- HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, addedHal);
+ HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, addedHal);
return;
}
}
@@ -269,7 +266,7 @@ void HalMgrLoad(afb_req_t request)
afb_req_fail(request,
"date_string_allocation",
"Didn't succeed to store (allocate) 'date' string");
- HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, addedHal);
+ HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, addedHal);
return;
}
}
@@ -314,7 +311,7 @@ void HalMgrUnload(afb_req_t request)
return;
}
- halToRemove = HalUtlSearchHalDataByApiName(&halMgrData->halDataList, apiName);
+ halToRemove = HalUtlSearchHalDataByApiName(&halMgrData->halDataListHead, apiName);
if(! halToRemove) {
afb_req_fail(request, "requested_api", "Can't find api to remove");
return;
@@ -325,7 +322,7 @@ void HalMgrUnload(afb_req_t request)
return;
}
- if(HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, halToRemove)) {
+ if(HalUtlRemoveSelectedHalFromList(&halMgrData->halDataListHead, halToRemove)) {
afb_req_fail(request, "unregister_error", "Didn't succeed to remove specified api");
return;
}
diff --git a/src/4a-hal-manager/4a-hal-manager.c b/src/4a-hal-manager/4a-hal-manager.c
index cd6f981..383b920 100644
--- a/src/4a-hal-manager/4a-hal-manager.c
+++ b/src/4a-hal-manager/4a-hal-manager.c
@@ -66,14 +66,11 @@ static int HalMgrInitApi(afb_api_t apiHandle)
if(HalUtlInitializeHalMgrData(apiHandle, halMgrData, HAL_MANAGER_API_NAME, HAL_MANAGER_API_INFO))
return -3;
- currentHalData = halMgrData->halDataList;
- while(currentHalData) {
+ cds_list_for_each_entry(currentHalData, &halMgrData->halDataListHead, node) {
if(! currentHalData->apiName)
return -4;
else if(afb_api_require_api(apiHandle, currentHalData->apiName, 1))
return -5;
-
- currentHalData = currentHalData->next;
}
return 0;
@@ -134,6 +131,8 @@ int afbBindingEntry(afb_api_t apiHandle)
if(! halMgrData)
return -2;
+ CDS_INIT_LIST_HEAD(&halMgrData->halDataListHead);
+
// Load Hal-Manager using Api v3
if(HalMgrCreateApi(apiHandle, halMgrData))
return -3;
diff --git a/src/4a-internals-hal/4a-internals-hal-api-loader.c b/src/4a-internals-hal/4a-internals-hal-api-loader.c
index bbe4936..6f09d4a 100644
--- a/src/4a-internals-hal/4a-internals-hal-api-loader.c
+++ b/src/4a-internals-hal/4a-internals-hal-api-loader.c
@@ -193,7 +193,7 @@ int InternalHalCreateApi(afb_api_t apiHandle, char *path, struct HalMgrData *hal
}
// Allocation of current internal hal data
- currentHalData = HalUtlAddHalToHalList(&halMgrData->halDataList);
+ currentHalData = HalUtlAddHalToHalList(&halMgrData->halDataListHead);
if(! currentHalData) {
AFB_API_ERROR(apiHandle, "Didn't succeed to add hal to hal list");
return -4;