ret = hal_common_get_backend(HAL_MODULE_CAMERA, (void **)&new_handle->funcs);
if (ret != TIZEN_ERROR_NONE) {
SLOGE("Failed to get backend");
- g_free(new_handle);
- return CAMERA_ERROR_INTERNAL;
+ goto __HAL_INIT_FAILED;
}
- HAL_CAMERA_DO_RETURN_IF_FAILED(new_handle->funcs, g_free(new_handle), CAMERA_ERROR_NOT_IMPLEMENTED);
- HAL_CAMERA_DO_RETURN_IF_FAILED(new_handle->funcs->init, g_free(new_handle), CAMERA_ERROR_NOT_IMPLEMENTED);
+ if (!new_handle->funcs || !new_handle->funcs->init) {
+ SLOGE("invalid ptr[%p]", new_handle->funcs);
+ goto __HAL_INIT_FAILED;
+ }
ret = new_handle->funcs->init(&new_handle->backend);
if (ret != CAMERA_ERROR_NONE) {
SLOGE("backend init failed[0x%x]", ret);
- g_free(new_handle);
- return CAMERA_ERROR_INTERNAL;
+ goto __HAL_INIT_FAILED;
}
*camera_handle = (void *)new_handle;
return CAMERA_ERROR_NONE;
+
+__HAL_INIT_FAILED:
+ if (new_handle->funcs)
+ hal_common_put_backend(HAL_MODULE_CAMERA, (void *)new_handle->funcs);
+
+ g_free(new_handle);
+
+ return CAMERA_ERROR_INTERNAL;
}