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/4a-internals-hal/4a-internals-hal-cb.c | |
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/4a-internals-hal/4a-internals-hal-cb.c')
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-cb.c | 29 |
1 files changed, 13 insertions, 16 deletions
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"); |