From 1635fa472346d74ef3ba3a6e799fc8fbf3755a16 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Fri, 21 Jan 2022 12:01:42 +0000 Subject: [PATCH] Revert "codec_adapter: cadece: remove unnecessary goto's and fix memory leaks" This reverts commit 07f84ee0bf598c7fccb946cd834f9acec1ab36b3. --- src/audio/codec_adapter/codec/cadence.c | 65 ++++++++++++++----------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/audio/codec_adapter/codec/cadence.c b/src/audio/codec_adapter/codec/cadence.c index 7e031158d..3cc99d834 100644 --- a/src/audio/codec_adapter/codec/cadence.c +++ b/src/audio/codec_adapter/codec/cadence.c @@ -133,7 +133,7 @@ static int cadence_codec_init(struct comp_dev *dev) comp_err(dev, "cadence_codec_init(): could not find API function for id %x", api_id); ret = -EINVAL; - goto free; + goto out; } /* Obtain codec name */ @@ -142,36 +142,38 @@ static int cadence_codec_init(struct comp_dev *dev) if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_init() error %x: failed to get lib name", ret); - goto free; + module_free_memory(dev, cd); + goto out; } /* Get codec object size */ API_CALL(cd, XA_API_CMD_GET_API_SIZE, 0, &obj_size, ret); if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_init() error %x: failed to get lib object size", ret); - goto free; + module_free_memory(dev, cd); + goto out; } /* Allocate space for codec object */ cd->self = module_allocate_memory(dev, obj_size, 0); if (!cd->self) { comp_err(dev, "cadence_codec_init(): failed to allocate space for lib object"); - ret = -ENOMEM; - goto free; + module_free_memory(dev, cd); + goto out; + } else { + comp_dbg(dev, "cadence_codec_init(): allocated %d bytes for lib object", + obj_size); } - - comp_dbg(dev, "cadence_codec_init(): allocated %d bytes for lib object", obj_size); - /* Set all params to their default values */ API_CALL(cd, XA_API_CMD_INIT, XA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS, NULL, ret); - if (ret != LIB_NO_ERROR) - goto free; + if (ret != LIB_NO_ERROR) { + comp_err(dev, "cadence_codec_init(): error %x: failed to set default config", + ret); + goto out; + } comp_dbg(dev, "cadence_codec_init() done"); - - return 0; -free: - module_free_memory(dev, cd); +out: return ret; } @@ -195,7 +197,8 @@ static int apply_config(struct comp_dev *dev, enum module_cfg_type type) if (!cfg->avail || !size) { comp_err(dev, "apply_config() error: no config available, requested conf. type %d", type); - return -EIO; + ret = -EIO; + goto ret; } /* Read parameters stored in `data` - it may keep plenty of @@ -213,7 +216,7 @@ static int apply_config(struct comp_dev *dev, enum module_cfg_type type) comp_err(dev, "apply_config() error %x: failed to apply parameter %d value %d", ret, param->id, *(int32_t *)param->data); if (LIB_IS_FATAL_ERROR(ret)) - return ret; + goto ret; } /* Obtain next parameter, it starts right after the preceding one */ data = (char *)data + param->size; @@ -221,8 +224,9 @@ static int apply_config(struct comp_dev *dev, enum module_cfg_type type) } comp_dbg(dev, "apply_config() done"); - - return 0; + ret = 0; +ret: + return ret; } static int init_memory_tables(struct comp_dev *dev) @@ -241,7 +245,7 @@ static int init_memory_tables(struct comp_dev *dev) if (ret != LIB_NO_ERROR) { comp_err(dev, "init_memory_tables() error %x: failed to calculate memory blocks size", ret); - return ret; + goto err; } /* Get number of memory tables */ @@ -249,7 +253,7 @@ static int init_memory_tables(struct comp_dev *dev) if (ret != LIB_NO_ERROR) { comp_err(dev, "init_memory_tables() error %x: failed to get number of memory tables", ret); - return ret; + goto err; } /* Initialize each memory table */ @@ -435,17 +439,19 @@ static int cadence_codec_prepare(struct comp_dev *dev) if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_prepare() error %x: failed to get memtabs size", ret); - return ret; + goto err; } cd->mem_tabs = module_allocate_memory(dev, mem_tabs_size, 4); if (!cd->mem_tabs) { comp_err(dev, "cadence_codec_prepare() error: failed to allocate space for memtabs"); - return -ENOMEM; + ret = -ENOMEM; + goto err; + } else { + comp_dbg(dev, "cadence_codec_prepare(): allocated %d bytes for memtabs", + mem_tabs_size); } - comp_dbg(dev, "cadence_codec_prepare(): allocated %d bytes for memtabs", mem_tabs_size); - API_CALL(cd, XA_API_CMD_SET_MEMTABS_PTR, 0, cd->mem_tabs, ret); if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_prepare() error %x: failed to set memtabs", @@ -483,6 +489,7 @@ static int cadence_codec_prepare(struct comp_dev *dev) return 0; free: module_free_memory(dev, cd->mem_tabs); +err: return ret; } @@ -512,33 +519,35 @@ static int cadence_codec_process(struct comp_dev *dev) if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_process() error %x: failed to set size of input data", ret); - return ret; + goto err; } API_CALL(cd, XA_API_CMD_EXECUTE, XA_CMD_TYPE_DO_EXECUTE, NULL, ret); if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_process() error %x: processing failed", ret); - return ret; + goto err; } API_CALL(cd, XA_API_CMD_GET_OUTPUT_BYTES, 0, &codec->mpd.produced, ret); if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_process() error %x: could not get produced bytes", ret); - return ret; + goto err; } API_CALL(cd, XA_API_CMD_GET_CURIDX_INPUT_BUF, 0, &codec->mpd.consumed, ret); if (ret != LIB_NO_ERROR) { comp_err(dev, "cadence_codec_process() error %x: could not get consumed bytes", ret); - return ret; + goto err; } comp_dbg(dev, "cadence_codec_process() done"); return 0; +err: + return ret; } static int cadence_codec_apply_config(struct comp_dev *dev)