From 3014e800e81a40e8376d1ecafeddd6945381619c Mon Sep 17 00:00:00 2001 From: Jaechul Lee Date: Thu, 18 Mar 2021 14:22:57 +0900 Subject: [PATCH] Add handling exception cases in init/deinit functions AUDIO_RET_OK is returned with a invalid handle when haltest try to call init/deinit testcases [Version] 0.0.3 [Issue Type] Initial release Change-Id: I80d1bb14260c2deed03c2888d21405b4167eed0e Signed-off-by: Jaechul Lee --- CMakeLists.txt | 2 +- packaging/hal-api-audio.spec | 3 ++- src/hal-api-audio.c | 32 ++++++++++++++++++++++++-------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2be8b16..7ee91b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) -SET(PKG_MODULES hal-api-common) +SET(PKG_MODULES hal-api-common capi-base-common) INCLUDE(FindPkgConfig) pkg_check_modules(pkgs REQUIRED ${PKG_MODULES}) diff --git a/packaging/hal-api-audio.spec b/packaging/hal-api-audio.spec index e979528..b7e729a 100644 --- a/packaging/hal-api-audio.spec +++ b/packaging/hal-api-audio.spec @@ -1,6 +1,6 @@ Name: hal-api-audio Summary: TIZEN Audio HAL -Version: 0.0.2 +Version: 0.0.3 Release: 0 Group: System/Libraries License: Apache-2.0 @@ -8,6 +8,7 @@ URL: http://tizen.org Source0: hal-api-audio-%{version}.tar.gz BuildRequires: cmake BuildRequires: pkgconfig(hal-api-common) +BuildRequires: pkgconfig(capi-base-common) %description TIZEN Audio HAL diff --git a/src/hal-api-audio.c b/src/hal-api-audio.c index 137dd93..a10b67f 100644 --- a/src/hal-api-audio.c +++ b/src/hal-api-audio.c @@ -1,12 +1,13 @@ #include #include +#include #include "hal-audio.h" #define AUDIO_RETURN_VAL_IF_FAIL(expr, val) do { \ - if (!(expr)) { \ - return val; \ - } \ + if (!(expr)) { \ + return val; \ + } \ } while (0) static hal_backend_audio_funcs *g_hal_audio_funcs = NULL; @@ -15,21 +16,36 @@ audio_return_e hal_audio_init(void **audio_handle) { audio_return_e ret; - if (g_hal_audio_funcs) - return AUDIO_RET_OK; + AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER); + AUDIO_RETURN_VAL_IF_FAIL(!g_hal_audio_funcs, AUDIO_ERR_INTERNAL); ret = hal_common_get_backend(HAL_MODULE_AUDIO, (void **)&g_hal_audio_funcs); + if (ret != TIZEN_ERROR_NONE) + return ret; - AUDIO_RETURN_VAL_IF_FAIL(ret == 0, AUDIO_ERR_INTERNAL); - AUDIO_RETURN_VAL_IF_FAIL(g_hal_audio_funcs->init, AUDIO_ERR_NOT_IMPLEMENTED); + if (!g_hal_audio_funcs->init) { + ret = AUDIO_ERR_NOT_IMPLEMENTED; + goto fail; + } - return g_hal_audio_funcs->init(audio_handle); + ret = g_hal_audio_funcs->init(audio_handle); + if (ret != AUDIO_RET_OK) + goto fail; + + return AUDIO_RET_OK; + +fail: + hal_common_put_backend(HAL_MODULE_AUDIO, (void *)g_hal_audio_funcs); + g_hal_audio_funcs = NULL; + + return ret; } audio_return_e hal_audio_deinit(void *audio_handle) { audio_return_e ret; + AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER); AUDIO_RETURN_VAL_IF_FAIL(g_hal_audio_funcs, AUDIO_ERR_INTERNAL); AUDIO_RETURN_VAL_IF_FAIL(g_hal_audio_funcs->deinit, AUDIO_ERR_NOT_IMPLEMENTED); -- 2.34.1