summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2019-06-14 17:59:20 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2019-06-18 11:34:34 +0200
commit66f27bce6355cc7df978a9d7a6bc725542057a01 (patch)
treebed31fbbd60ec80a2f6f57f8182c326ae048d5b7 /src
parent870d396127c2e5e247cb85a7921143e78ee81ce4 (diff)
Refactoring 'probed devices' linked list
Refactoring 'probed devices' linked list code using liburcu. BUG-AGL: SPEC-2329 Change-Id: I4d0255bc020733b1abbea1f3e6195c73cf8da8f6 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to 'src')
-rw-r--r--src/4a-hal-manager/4a-hal-manager-cb.c2
-rw-r--r--src/4a-internals-hal/4a-internals-hal-api-loader.c2
-rw-r--r--src/4a-internals-hal/4a-internals-hal-cb.c29
-rw-r--r--src/4a-internals-hal/4a-internals-hal-mixer-link.c2
4 files changed, 17 insertions, 18 deletions
diff --git a/src/4a-hal-manager/4a-hal-manager-cb.c b/src/4a-hal-manager/4a-hal-manager-cb.c
index 396bab2..843066b 100644
--- a/src/4a-hal-manager/4a-hal-manager-cb.c
+++ b/src/4a-hal-manager/4a-hal-manager-cb.c
@@ -117,7 +117,7 @@ void HalMgrLoaded(afb_req_t request)
snprintf(cardIdString, sizeof(cardIdString), "not-found");
dependenciesJ = HalUtlGetJsonArrayForAllDependencies(apiHandle,
- &currentHalData->internalHalData->probedDevicesList,
+ &currentHalData->internalHalData->probedDevicesListHead,
DEPENDENCY_COMPACT_JSON);
if(! dependenciesJ)
AFB_REQ_WARNING(request, "Didn't succeed to generate all dependencies compact json array");
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 f18f651..7a82a46 100644
--- a/src/4a-internals-hal/4a-internals-hal-api-loader.c
+++ b/src/4a-internals-hal/4a-internals-hal-api-loader.c
@@ -211,6 +211,8 @@ int InternalHalCreateApi(afb_api_t apiHandle, char *path, struct HalMgrData *hal
return -5;
}
+ CDS_INIT_LIST_HEAD(&currentHalData->internalHalData->probedDevicesListHead);
+
// Create one API
if(! afb_api_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, InternalHalLoadOneApi, ctrlConfig)) {
AFB_API_ERROR(apiHandle, "An error occurred at '%s' internal hal api creation", ctrlConfig->api);
diff --git a/src/4a-internals-hal/4a-internals-hal-cb.c b/src/4a-internals-hal/4a-internals-hal-cb.c
index ef24cc4..07bad11 100644
--- a/src/4a-internals-hal/4a-internals-hal-cb.c
+++ b/src/4a-internals-hal/4a-internals-hal-cb.c
@@ -732,7 +732,7 @@ int InternalHalProcessOneHalDependency(afb_api_t apiHandle, json_object *Depende
return 0;
}
-int InternalHalProcessAllHalDependencies(afb_api_t apiHandle, json_object *DependenciesJ, struct InternalHalProbedDevice **halDevicesToProbeList)
+int InternalHalProcessAllHalDependencies(afb_api_t apiHandle, json_object *DependenciesJ, struct cds_list_head *halDevicesToProbeListHead)
{
int idx, dependenciesCount, ret;
@@ -741,7 +741,7 @@ int InternalHalProcessAllHalDependencies(afb_api_t apiHandle, json_object *Depen
json_type dependenciesJType;
json_object *currentDependencyJ;
- if(! apiHandle || ! DependenciesJ || ! halDevicesToProbeList) {
+ if(! apiHandle || ! DependenciesJ || ! halDevicesToProbeListHead) {
AFB_API_ERROR(apiHandle, "Invalid argument(s)");
return -1;
}
@@ -774,14 +774,14 @@ int InternalHalProcessAllHalDependencies(afb_api_t apiHandle, json_object *Depen
"Dependency ('%s') is not an object, section is malformed, won't be able to handle it ('haldependencies' : '%s')",
json_object_get_string(currentDependencyJ),
json_object_get_string(DependenciesJ));
- HalUtlRemoveAllProbedDevicesFromList(halDevicesToProbeList);
+ HalUtlRemoveAllProbedDevicesFromList(halDevicesToProbeListHead);
return -3;
}
- currentDeviceToProbe = HalUtlAddProbedDeviceToProbedDeviceList(halDevicesToProbeList);
+ currentDeviceToProbe = HalUtlAddProbedDeviceToProbedDeviceList(halDevicesToProbeListHead);
if(! currentDeviceToProbe) {
AFB_API_ERROR(apiHandle, "Error when tried to add a device to probe into device to probe list");
- HalUtlRemoveAllProbedDevicesFromList(halDevicesToProbeList);
+ HalUtlRemoveAllProbedDevicesFromList(halDevicesToProbeListHead);
return -4;
}
@@ -791,7 +791,7 @@ int InternalHalProcessAllHalDependencies(afb_api_t apiHandle, json_object *Depen
"Error %i returned when tried to process '%s' dependency",
ret,
json_object_get_string(currentDependencyJ));
- HalUtlRemoveAllProbedDevicesFromList(halDevicesToProbeList);
+ HalUtlRemoveAllProbedDevicesFromList(halDevicesToProbeListHead);
return -5;
}
}
@@ -939,24 +939,23 @@ int InternalHalHandleOneHalDependencies(afb_api_t apiHandle, struct InternalHalP
return 0;
}
-int InternalHalHandleAllHalDependencies(afb_api_t apiHandle, struct InternalHalProbedDevice **halDevicesToProbeList)
+int InternalHalHandleAllHalDependencies(afb_api_t apiHandle, struct cds_list_head *halDevicesToProbeListHead)
{
int ret;
struct InternalHalProbedDevice *halCurrentDeviceToProbe;
- if(! apiHandle || ! halDevicesToProbeList) {
+ if(! apiHandle || ! halDevicesToProbeListHead) {
AFB_API_ERROR(apiHandle, "Invalid argument(s)");
return -1;
}
- halCurrentDeviceToProbe = *halDevicesToProbeList;
- if(! halCurrentDeviceToProbe) {
+ if(cds_list_empty(halDevicesToProbeListHead)) {
AFB_API_WARNING(apiHandle, "No device to probe in list, 'haldependencies' handling skipped");
return 0;
}
- while(halCurrentDeviceToProbe) {
+ cds_list_for_each_entry(halCurrentDeviceToProbe, halDevicesToProbeListHead, node) {
ret = InternalHalHandleOneHalDependencies(apiHandle, &halCurrentDeviceToProbe);
if(ret < 0) {
AFB_API_ERROR(apiHandle,
@@ -975,8 +974,6 @@ int InternalHalHandleAllHalDependencies(afb_api_t apiHandle, struct InternalHalP
json_object_get_string(halCurrentDeviceToProbe->requestedDeviceJ));
return -3;
}
-
- halCurrentDeviceToProbe = halCurrentDeviceToProbe->next;
}
return 0;
@@ -996,12 +993,12 @@ int InternalHalHalDependenciesConfig(afb_api_t apiHandle, CtlSectionT *section,
return -2;
if(DependenciesJ &&
- InternalHalProcessAllHalDependencies(apiHandle, DependenciesJ, &currentHalData->internalHalData->probedDevicesList)) {
+ InternalHalProcessAllHalDependencies(apiHandle, DependenciesJ, &currentHalData->internalHalData->probedDevicesListHead)) {
AFB_API_ERROR(apiHandle, "Failed to process 'haldependencies' section");
return -3;
}
else if(! DependenciesJ &&
- (InternalHalHandleAllHalDependencies(apiHandle, &currentHalData->internalHalData->probedDevicesList)) < 0) {
+ (InternalHalHandleAllHalDependencies(apiHandle, &currentHalData->internalHalData->probedDevicesListHead)) < 0) {
AFB_API_ERROR(apiHandle, "Failed to handle 'haldependencies' section");
return -4;
}
@@ -1074,7 +1071,7 @@ void InternalHalInfo(afb_req_t request)
}
dependenciesArray = HalUtlGetJsonArrayForAvailableDependencies(apiHandle,
- &currentHalData->internalHalData->probedDevicesList,
+ &currentHalData->internalHalData->probedDevicesListHead,
DEPENDENCY_FULL_JSON);
if(! dependenciesArray) {
afb_req_fail(request, "dependencies_data", "Didn't succeed to generate dependencies data array");
diff --git a/src/4a-internals-hal/4a-internals-hal-mixer-link.c b/src/4a-internals-hal/4a-internals-hal-mixer-link.c
index 985de96..879ab3e 100644
--- a/src/4a-internals-hal/4a-internals-hal-mixer-link.c
+++ b/src/4a-internals-hal/4a-internals-hal-mixer-link.c
@@ -201,7 +201,7 @@ int InternalHalAttachToMixer(afb_api_t apiHandle)
}
dependencyJ = HalUtlGetJsonArrayForAvailableDependencies(apiHandle,
- &currentHalData->internalHalData->probedDevicesList,
+ &currentHalData->internalHalData->probedDevicesListHead,
DEPENDENCY_COMPACT_JSON);
if(! dependencyJ) {
AFB_API_ERROR(apiHandle, "Didn't succeed to generate available dependencies compact json array");