Add handling exception cases in init/deinit functions 21/255421/7 accepted/tizen/unified/20210323.122707 submit/tizen/20210323.085437
authorJaechul Lee <jcsing.lee@samsung.com>
Thu, 18 Mar 2021 05:22:57 +0000 (14:22 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Mon, 22 Mar 2021 02:42:03 +0000 (11:42 +0900)
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 <jcsing.lee@samsung.com>
CMakeLists.txt
packaging/hal-api-audio.spec
src/hal-api-audio.c

index 2be8b16..7ee91b0 100644 (file)
@@ -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})
index e979528..b7e729a 100644 (file)
@@ -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
index 137dd93..a10b67f 100644 (file)
@@ -1,12 +1,13 @@
 #include <stdlib.h>
 #include <hal/hal-common.h>
+#include <tizen.h>
 
 #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);