diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-06-14 17:59:20 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-06-18 11:34:34 +0200 |
commit | 66f27bce6355cc7df978a9d7a6bc725542057a01 (patch) | |
tree | bed31fbbd60ec80a2f6f57f8182c326ae048d5b7 /src | |
parent | 870d396127c2e5e247cb85a7921143e78ee81ce4 (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.c | 2 | ||||
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-api-loader.c | 2 | ||||
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-cb.c | 29 | ||||
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-mixer-link.c | 2 |
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, - ¤tHalData->internalHalData->probedDevicesList, + ¤tHalData->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(¤tHalData->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, ¤tHalData->internalHalData->probedDevicesList)) { + InternalHalProcessAllHalDependencies(apiHandle, DependenciesJ, ¤tHalData->internalHalData->probedDevicesListHead)) { AFB_API_ERROR(apiHandle, "Failed to process 'haldependencies' section"); return -3; } else if(! DependenciesJ && - (InternalHalHandleAllHalDependencies(apiHandle, ¤tHalData->internalHalData->probedDevicesList)) < 0) { + (InternalHalHandleAllHalDependencies(apiHandle, ¤tHalData->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, - ¤tHalData->internalHalData->probedDevicesList, + ¤tHalData->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, - ¤tHalData->internalHalData->probedDevicesList, + ¤tHalData->internalHalData->probedDevicesListHead, DEPENDENCY_COMPACT_JSON); if(! dependencyJ) { AFB_API_ERROR(apiHandle, "Didn't succeed to generate available dependencies compact json array"); |