From 8e923d9e07f483d209269d4af9070ed729600f05 Mon Sep 17 00:00:00 2001 From: Jonathan Aillet Date: Fri, 15 Jun 2018 21:08:57 +0200 Subject: Free json objects that should have been freed Free json objects that should have been freed after use. Change-Id: Ifb3dab9672d0c039292ae05f23ade008fe82ade8 Signed-off-by: Jonathan Aillet --- .../4a-hal-controllers-alsacore-link.c | 96 +++++++++++++--------- 4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c | 29 +++++-- .../4a-hal-controllers-mixer-link.c | 82 +++++++++--------- 3 files changed, 122 insertions(+), 85 deletions(-) (limited to '4a-hal/4a-hal-controllers') diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c index 7825f75..d49a8ba 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c @@ -103,7 +103,7 @@ int HalCtlsGetCardIdByCardPath(AFB_ApiT apiHandle, char *devPath) enum CallError returnedError; - json_object *toSendJ, *returnJ, *responsJ, *devidJ; + json_object *toSendJ, *returnJ = NULL, *responsJ, *devidJ; if(! apiHandle) { AFB_ApiError(apiHandle, "%s: api handle not available", __func__); @@ -140,16 +140,21 @@ int HalCtlsGetCardIdByCardPath(AFB_ApiT apiHandle, char *devPath) } } + if(returnJ) + json_object_put(returnJ); + return cardId; } int HalCtlsSubscribeToAlsaCardEvent(AFB_ApiT apiHandle, char *cardId) { + int err = 0; + char *returnedStatus = NULL, *returnedInfo = NULL; enum CallError returnedError; - json_object *subscribeQueryJ, *returnedJ, *returnedWarningJ; + json_object *subscribeQueryJ, *returnedJ = NULL, *returnedWarningJ; wrap_json_pack(&subscribeQueryJ, "{s:s}", "devid", cardId); if(AFB_ServiceSync(apiHandle, ALSACORE_API, ALSACORE_SUBSCRIBE_VERB, subscribeQueryJ, &returnedJ)) { @@ -161,7 +166,7 @@ int HalCtlsSubscribeToAlsaCardEvent(AFB_ApiT apiHandle, char *cardId) ALSACORE_API, returnedStatus ? returnedStatus : "not returned", returnedInfo ? returnedInfo : "not returned"); - return -1; + err = -1; } else if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "info", &returnedWarningJ)) { AFB_ApiError(apiHandle, @@ -169,19 +174,24 @@ int HalCtlsSubscribeToAlsaCardEvent(AFB_ApiT apiHandle, char *cardId) ALSACORE_SUBSCRIBE_VERB, ALSACORE_API, json_object_get_string(returnedWarningJ)); - return -2; + err = -2; } - return 0; + if(returnedJ) + json_object_put(returnedJ); + + return err; } int HalCtlsGetAlsaCtlInfo(AFB_ApiT apiHandle, char *cardId, struct CtlHalAlsaCtl *currentAlsaCtl) { + int err = 0; + char *returnedStatus = NULL, *returnedInfo = NULL; enum CallError returnedError; - json_object *queryJ, *returnedJ; + json_object *queryJ, *returnedJ = NULL; if(! apiHandle) { AFB_ApiError(apiHandle, "%s: api handle not available", __func__); @@ -226,45 +236,48 @@ int HalCtlsGetAlsaCtlInfo(AFB_ApiT apiHandle, char *cardId, struct CtlHalAlsaCtl ALSACORE_API, returnedStatus ? returnedStatus : "not returned", returnedInfo ? returnedInfo : "not returned"); - return -6; + err = -6; } - - if(currentAlsaCtl->name && wrap_json_unpack(returnedJ, "{s:{s:i}}", "response", "id", ¤tAlsaCtl->numid)) { + else if(currentAlsaCtl->name && wrap_json_unpack(returnedJ, "{s:{s:i}}", "response", "id", ¤tAlsaCtl->numid)) { AFB_ApiError(apiHandle, "Can't find alsa control 'id' from control 'name': '%s' on device '%s'", currentAlsaCtl->name, cardId); - return -7; + err = -7; } else if(! json_object_object_get_ex(returnedJ, "response", NULL)) { AFB_ApiError(apiHandle, "Can't find alsa control 'id': %i on device '%s'", currentAlsaCtl->numid, cardId); - return -8; + err = -8; } - // TBD JAI : get dblinear/dbminmax/... values - if(wrap_json_unpack(returnedJ, "{s:{s:{s?:i s?:i s?:i s?:i s?:i}}}", - "response", - "ctl", - "type", (int *) ¤tAlsaCtl->alsaCtlProperties.type, - "count", ¤tAlsaCtl->alsaCtlProperties.count, - "min", ¤tAlsaCtl->alsaCtlProperties.minval, - "max", ¤tAlsaCtl->alsaCtlProperties.maxval, - "step", ¤tAlsaCtl->alsaCtlProperties.step)) { + else if(wrap_json_unpack(returnedJ, "{s:{s:{s?:i s?:i s?:i s?:i s?:i}}}", + "response", + "ctl", + "type", (int *) ¤tAlsaCtl->alsaCtlProperties.type, + "count", ¤tAlsaCtl->alsaCtlProperties.count, + "min", ¤tAlsaCtl->alsaCtlProperties.minval, + "max", ¤tAlsaCtl->alsaCtlProperties.maxval, + "step", ¤tAlsaCtl->alsaCtlProperties.step)) { AFB_ApiError(apiHandle, "Didn't succeed to get control %i properties on device '%s' : '%s'", currentAlsaCtl->numid, cardId, json_object_get_string(returnedJ)); - return -9; + err = -9; } - return 0; + if(returnedJ) + json_object_put(returnedJ); + + return err; } int HalCtlsSetAlsaCtlValue(AFB_ApiT apiHandle, char *cardId, int ctlId, json_object *valuesJ) { + int err = 0; + char *returnedStatus = NULL, *returnedInfo = NULL; enum CallError returnedError; - json_object *queryJ, *returnedJ, *returnedWarningJ; + json_object *queryJ, *returnedJ = NULL, *returnedWarningJ; if(! apiHandle) { AFB_ApiError(apiHandle, "%s: api handle not available", __func__); @@ -297,28 +310,32 @@ int HalCtlsSetAlsaCtlValue(AFB_ApiT apiHandle, char *cardId, int ctlId, json_obj ALSACORE_API, returnedStatus ? returnedStatus : "not returned", returnedInfo ? returnedInfo : "not returned"); - return 1; + err = 1; } - - if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { + else if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { AFB_ApiError(apiHandle, "Warning raised during call to verb %s of %s api : '%s'", ALSACORE_CTLSET_VERB, ALSACORE_API, json_object_get_string(returnedWarningJ)); - return 2; + err = 2; } - return 0; + if(returnedJ) + json_object_put(returnedJ); + + return err; } int HalCtlsCreateAlsaCtl(AFB_ApiT apiHandle, char *cardId, struct CtlHalAlsaCtl *alsaCtlToCreate) { + int err = 0; + char *returnedStatus = NULL, *returnedInfo = NULL; enum CallError returnedError; - json_object *queryJ, *returnedJ, *returnedWarningJ, *responseJ; + json_object *queryJ, *returnedJ = NULL, *returnedWarningJ, *responseJ; if(! apiHandle) { AFB_ApiError(apiHandle, "%s: api handle not available", __func__); @@ -360,16 +377,15 @@ int HalCtlsCreateAlsaCtl(AFB_ApiT apiHandle, char *cardId, struct CtlHalAlsaCtl ALSACORE_API, returnedStatus ? returnedStatus : "not returned", returnedInfo ? returnedInfo : "not returned"); - return -5; + err = -5; } - - if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { + else if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { AFB_ApiError(apiHandle, "Warning raised during call to verb %s of %s api : '%s'", ALSACORE_GETINFO_VERB, ALSACORE_API, json_object_get_string(returnedWarningJ)); - return -6; + err = -6; } else if(wrap_json_unpack(returnedJ, "{s:o}", "response", &responseJ)) { AFB_ApiError(apiHandle, @@ -377,20 +393,23 @@ int HalCtlsCreateAlsaCtl(AFB_ApiT apiHandle, char *cardId, struct CtlHalAlsaCtl ALSACORE_GETINFO_VERB, ALSACORE_API, json_object_get_string(returnedJ)); - return -7; + err = -7; } else if(wrap_json_unpack(responseJ, "{s:i}", "id", &alsaCtlToCreate->numid)) { AFB_ApiError(apiHandle, "Can't get create id from %s of %s api", ALSACORE_GETINFO_VERB, ALSACORE_API); - return -8; + err = -8; } else if(wrap_json_unpack(responseJ, "{s:o}", "ctl", NULL)) { AFB_ApiWarning(apiHandle, "Control %s was already present but has been updated", alsaCtlToCreate->name); } - return 0; + if(returnedJ) + json_object_put(returnedJ); + + return err; } /******************************************************************************* @@ -481,10 +500,11 @@ void HalCtlsActionOnAlsaCtl(AFB_ReqT request) currentAlsaCtl->ctl.numid, cardIdString, json_object_get_string(requestJson)); + json_object_put(convertedJ); return; } - json_object_put(convertedJ); - AFB_ReqSuccess(request, NULL, "Action on alsa control correclty done"); + + json_object_put(convertedJ); } \ No newline at end of file diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c index 07ec9cc..f560c7c 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c @@ -222,7 +222,9 @@ int HalCtlsProcessOneHalMapObject(AFB_ApiT apiHandle, struct CtlHalAlsaMap *alsa int HalCtlsHandleOneHalMapObject(AFB_ApiT apiHandle, char *cardId, struct CtlHalAlsaMap *alsaMap) { - json_object *valueJ, *convertedValueJ; + int err; + + json_object *valueJ, *convertedValueJ = NULL; if(alsaMap->ctl.alsaCtlCreation) { if(HalCtlsCreateAlsaCtl(apiHandle, cardId, &alsaMap->ctl)) { @@ -242,20 +244,28 @@ int HalCtlsHandleOneHalMapObject(AFB_ApiT apiHandle, char *cardId, struct CtlHal if(alsaMap->ctl.value) { // TBD JAI : handle alsa controls type valueJ = json_object_new_int(alsaMap->ctl.value); + err = 0; if(HalCtlsNormalizeJsonValues(apiHandle, &alsaMap->ctl.alsaCtlProperties, valueJ, &convertedValueJ)) { AFB_ApiError(apiHandle, "Error when trying to convert initiate value json '%s'", json_object_get_string(valueJ)); - return -3; + err = -3; } - - if(HalCtlsSetAlsaCtlValue(apiHandle, cardId, alsaMap->ctl.numid, convertedValueJ)) { + else if(HalCtlsSetAlsaCtlValue(apiHandle, cardId, alsaMap->ctl.numid, convertedValueJ)) { AFB_ApiError(apiHandle, "Error while trying to set initial value on alsa control %i, device '%s', value '%s'", alsaMap->ctl.numid, cardId, json_object_get_string(valueJ)); - return -4; + err = -4; } + + json_object_put(valueJ); + + if(convertedValueJ) + json_object_put(convertedValueJ); + + if(err) + return err; } if(alsaMap->actionJ) { @@ -390,7 +400,7 @@ void HalCtlsActionOnCall(AFB_ReqT request) struct SpecificHalData *currentCtlHalData; struct CtlHalMixerData *currentMixerData; - json_object *requestJson, *returnJ, *toReturnJ; + json_object *requestJson, *returnJ = NULL, *toReturnJ; apiHandle = (AFB_ApiT) afb_request_get_dynapi(request); if(! apiHandle) { @@ -443,7 +453,7 @@ void HalCtlsActionOnCall(AFB_ReqT request) } else if(wrap_json_unpack(returnJ, "{s:o}", "response", &toReturnJ)) { AFB_ReqSuccessF(request, - returnJ, + json_object_get(returnJ), "%s: Seems that %s call to api %s succeed, but no response was found : '%s'", __func__, currentMixerData->verbToCall, @@ -452,11 +462,14 @@ void HalCtlsActionOnCall(AFB_ReqT request) } else { AFB_ReqSuccessF(request, - toReturnJ, + json_object_get(toReturnJ), "Action %s correctly transferred to %s without any error raised", currentMixerData->verbToCall, apiToCall); } + + if(returnJ) + json_object_put(returnJ); } json_object *HalCtlsGetJsonArrayForMixerDataTable(AFB_ApiT apiHandle, struct CtlHalMixerDataT *currentMixerDataT, enum MixerDataType dataType) diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c index 082de3a..b192374 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c @@ -177,7 +177,7 @@ int HalCtlsHandleMixerAttachResponse(AFB_ApiT apiHandle, struct CtlHalSpecificDa int HalCtlsAttachToMixer(AFB_ApiT apiHandle) { - unsigned int err; + int err = 0, mixerError; char *apiToCall, *returnedStatus = NULL, *returnedInfo = NULL; @@ -188,7 +188,7 @@ int HalCtlsAttachToMixer(AFB_ApiT apiHandle) struct SpecificHalData *currentCtlHalData, *concurentHalData = NULL; struct SpecificHalData **firstHalData; - json_object *returnJ, *toReturnJ; + json_object *returnJ = NULL, *toReturnJ; if(! apiHandle) { AFB_ApiError(apiHandle, "%s: Can't get current hal api handle", __func__); @@ -246,21 +246,28 @@ int HalCtlsAttachToMixer(AFB_ApiT apiHandle) MIXER_ATTACH_VERB, returnedStatus ? returnedStatus : "not returned", returnedInfo ? returnedInfo : "not returned"); - return -7; + err = -7; } - else if(json_object_object_get_ex(returnJ, "response", &toReturnJ)) { - err = HalCtlsHandleMixerAttachResponse(apiHandle, currentCtlHalData->ctlHalSpecificData, toReturnJ); - if(err != (int) MIXER_NO_ERROR) { - AFB_ApiError(apiHandle, - "%s: Seems that %s call to api %s succeed but this warning was risen by response decoder : %i '%s'", - __func__, - MIXER_ATTACH_VERB, - apiToCall, - err, - json_object_get_string(toReturnJ)); - return -8; - } - + else if(! json_object_object_get_ex(returnJ, "response", &toReturnJ)) { + AFB_ApiError(apiHandle, + "%s: Seems that %s call to api %s succeed, but response is not valid : '%s'", + __func__, + MIXER_ATTACH_VERB, + apiToCall, + json_object_get_string(returnJ)); + err = -8; + } + else if((mixerError = HalCtlsHandleMixerAttachResponse(apiHandle, currentCtlHalData->ctlHalSpecificData, toReturnJ)) != (int) MIXER_NO_ERROR) { + AFB_ApiError(apiHandle, + "%s: Seems that %s call to api %s succeed but this warning was risen by response decoder : %i '%s'", + __func__, + MIXER_ATTACH_VERB, + apiToCall, + mixerError, + json_object_get_string(toReturnJ)); + err = -9; + } + else { AFB_ApiNotice(apiHandle, "%s: Seems that %s call to api %s succeed with no warning raised : '%s'", __func__, @@ -270,21 +277,17 @@ int HalCtlsAttachToMixer(AFB_ApiT apiHandle) currentCtlHalData->status = HAL_STATUS_READY; } - else { - AFB_ApiError(apiHandle, - "%s: Seems that %s call to api %s succeed, but response is not valid : '%s'", - __func__, - MIXER_ATTACH_VERB, - apiToCall, - json_object_get_string(returnJ)); - return -9; - } - return 0; + if(returnJ) + json_object_put(returnJ); + + return err; } int HalCtlsGetInfoFromMixer(AFB_ApiT apiHandle, char *apiToCall, json_object *requestJson, json_object **toReturnJ, char **returnedStatus, char **returnedInfo) { + int err = 0; + enum CallError returnedError; json_object *returnJ, *responseJ; @@ -313,9 +316,18 @@ int HalCtlsGetInfoFromMixer(AFB_ApiT apiHandle, char *apiToCall, json_object *re MIXER_INFO_VERB, *returnedStatus ? *returnedStatus : "not returned", *returnedInfo ? *returnedInfo : "not returned"); - return -4; + err = -4; + } + else if(! json_object_object_get_ex(returnJ, "response", &responseJ)) { + AFB_ApiError(apiHandle, + "%s: Seems that %s call to api %s succeed, but response is not valid : '%s'", + __func__, + MIXER_INFO_VERB, + apiToCall, + json_object_get_string(returnJ)); + err = -5; } - else if(json_object_object_get_ex(returnJ, "response", &responseJ)) { + else { AFB_ApiNotice(apiHandle, "%s: Seems that %s call to api %s succeed with no warning raised : '%s'", __func__, @@ -323,17 +335,9 @@ int HalCtlsGetInfoFromMixer(AFB_ApiT apiHandle, char *apiToCall, json_object *re apiToCall, json_object_get_string(responseJ)); - *toReturnJ = responseJ; - } - else { - AFB_ApiError(apiHandle, - "%s: Seems that %s call to api %s succeed, but response is not valid : '%s'", - __func__, - MIXER_INFO_VERB, - apiToCall, - json_object_get_string(returnJ)); - return -8; + *toReturnJ = json_object_get(responseJ); } - return 0; + json_object_put(returnJ); + return err; } \ No newline at end of file -- cgit 1.2.3-korg