Modify to allocate hal_backend_sensor_funcs before get backend 80/313880/4 accepted/tizen_unified_dev accepted/tizen_unified_toolchain accepted/tizen/9.0/unified/20241030.233910 accepted/tizen/unified/20240704.075643 accepted/tizen/unified/dev/20240708.001556 accepted/tizen/unified/toolchain/20240812.131232 accepted/tizen/unified/x/20240705.012348 accepted/tizen/unified/x/asan/20240813.225515 tizen_9.0_m2_release
authorSangYoun Kwak <sy.kwak@samsung.com>
Wed, 3 Jul 2024 05:19:02 +0000 (14:19 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Wed, 3 Jul 2024 07:27:35 +0000 (16:27 +0900)
Previously, the memory for hal backend sensor function was allocated
from the hal backend.
With new hal ABI versioning, it should be allocated from the hal api.
Thus, it is modified to allocate every required memories for hal backend
functions in this hal api sensor.

Change-Id: Ic001081d03866630423db717d35f2558f8c8a0eb
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
src/hal-api-sensor.cpp

index 02a88b5561e35286524e3779498703f67ed15b77..7357cf7392abcda2b5d705a2b7021d9fd57bcfad 100644 (file)
@@ -84,18 +84,28 @@ int hal_sensor_get_backend(void)
                goto FREE_MEMORY;
        }
 
-       hal_sensor_funcs = (hal_backend_sensor_funcs **)malloc(sizeof(hal_backend_sensor_funcs *) * hal_sensor_count);
+       hal_sensor_funcs = (hal_backend_sensor_funcs **)calloc(hal_sensor_count, sizeof(*hal_sensor_funcs));
        if (!hal_sensor_funcs) {
                _E("Failed to allocate memory.");
                goto FREE_MEMORY;
        }
 
+       for(i = 0; i < hal_sensor_count; i++) {
+               hal_sensor_funcs[i] = (hal_backend_sensor_funcs *)calloc(1, sizeof(**hal_sensor_funcs));
+               if (!hal_sensor_funcs[i]) {
+                       _E("Failed to allocate memory.");
+                       goto FREE_MEMORY;
+               }
+       }
+
        for(i = 0; i < hal_sensor_count; i++) {
                ret_getbackend = hal_common_get_backend_with_library_name(HAL_MODULE_SENSOR, (void **)&hal_sensor_funcs[i], hal_sensor_names[i]);
                if (ret_getbackend < 0) {
                        _E("Failed to get backend (%s)", hal_sensor_names[i]);
-               } else
+                       FREE(hal_sensor_funcs[i]);
+               } else {
                        loaded_backend++;
+               }
        }
 
        if (loaded_backend == 0) {
@@ -107,6 +117,12 @@ int hal_sensor_get_backend(void)
        return 0;
 
 FREE_MEMORY:
+       if (hal_sensor_funcs != NULL) {
+               for (int i = 0; i < hal_sensor_count; ++i)
+                       FREE(hal_sensor_funcs[i]);
+               FREE(hal_sensor_funcs);
+       }
+
        for(i = 0; i < hal_sensor_count; i++)
                FREE(hal_sensor_names[i]);
 
@@ -127,6 +143,7 @@ int hal_sensor_put_backend(void)
        for (i = 0; i < hal_sensor_count; i++) {
                if (hal_sensor_funcs[i]) {
                        hal_common_put_backend_with_library_name(HAL_MODULE_SENSOR, (void *)hal_sensor_funcs[i], hal_sensor_names[i]);
+                       FREE(hal_sensor_funcs[i]);
                }
                FREE(hal_sensor_names[i]);
        }