Skip to content

Commit 4eea2b3

Browse files
committed
[CodeClean] use glib function to get backends
Code clean, fix mem leak case and use glib to get backend libs. Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
1 parent 5bd26c6 commit 4eea2b3

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/hal-api-ml.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ hal_ml_exit_backend (void *data, void *user_data)
6161
}
6262

6363
static int hal_ml_backend_count = 0;
64-
static char **hal_ml_backend_names = NULL;
64+
static gchar **hal_ml_backend_names = NULL;
6565

6666
#define MAX_LIB_NAME_LENGTH 256
6767

@@ -70,6 +70,12 @@ hal_ml_scan_backends (void)
7070
{
7171
_D ("Scanning available HAL ML backends...");
7272

73+
if (hal_ml_backend_names) {
74+
_W ("Rescan HAL ML backends, internal error?");
75+
g_strfreev (hal_ml_backend_names);
76+
hal_ml_backend_names = NULL;
77+
}
78+
7379
hal_ml_backend_count = hal_common_get_backend_count (HAL_MODULE_ML);
7480
if (hal_ml_backend_count < 0) {
7581
_E ("Failed to get backend count");
@@ -82,9 +88,9 @@ hal_ml_scan_backends (void)
8288

8389
_D ("hal_ml_backend_count: %d", hal_ml_backend_count);
8490

85-
hal_ml_backend_names = (char **) malloc (sizeof (char *) * hal_ml_backend_count);
91+
hal_ml_backend_names = g_new0 (gchar*, hal_ml_backend_count + 1);
8692
for (int i = 0; i < hal_ml_backend_count; i++) {
87-
hal_ml_backend_names[i] = (char *) malloc (sizeof (char) * MAX_LIB_NAME_LENGTH);
93+
hal_ml_backend_names[i] = g_new0 (gchar, MAX_LIB_NAME_LENGTH);
8894
}
8995

9096
hal_common_get_backend_library_names (HAL_MODULE_ML, hal_ml_backend_names,
@@ -205,17 +211,16 @@ hal_ml_create (const char *backend_name, hal_ml_h *handle)
205211
/* Find matched backend */
206212
for (int i = 0; i < hal_ml_backend_count; i++) {
207213
if (g_strrstr (hal_ml_backend_names[i], backend_name) != NULL) {
214+
gchar *backend_lib_name = hal_ml_backend_names[i];
208215
hal_ml_s *new_handle = g_new0 (hal_ml_s, 1);
209216
if (!new_handle) {
210217
return HAL_ML_ERROR_OUT_OF_MEMORY;
211218
}
212219

213-
new_handle->backend_library_name = hal_ml_backend_names[i];
214-
215220
/* Fill function pointers from backend */
216221
int ret = hal_common_get_backend_with_library_name_v2 (HAL_MODULE_ML,
217222
(void **) &new_handle->funcs, NULL, hal_ml_create_backend,
218-
new_handle->backend_library_name);
223+
backend_lib_name);
219224

220225
if (ret != 0 || !new_handle->funcs || !new_handle->funcs->init) {
221226
_E ("Failed to get backend");
@@ -229,13 +234,15 @@ hal_ml_create (const char *backend_name, hal_ml_h *handle)
229234
_E ("Failed to initialize backend.");
230235
hal_common_put_backend_with_library_name_v2 (HAL_MODULE_ML,
231236
(void *) new_handle->funcs, NULL, hal_ml_exit_backend,
232-
new_handle->backend_library_name);
237+
backend_lib_name);
238+
g_free (new_handle);
233239
return HAL_ML_ERROR_RUNTIME_ERROR;
234240
}
235241

236-
_I ("Backend initialized successfully with %s", new_handle->backend_library_name);
242+
_I ("Backend initialized successfully with %s", backend_lib_name);
243+
new_handle->backend_library_name = g_strdup (backend_lib_name);
237244
*handle = (hal_ml_h) new_handle;
238-
return ret;
245+
return HAL_ML_ERROR_NONE;
239246
}
240247
}
241248

@@ -263,6 +270,7 @@ hal_ml_destroy (hal_ml_h handle)
263270
ret = hal_common_put_backend_with_library_name_v2 (HAL_MODULE_ML,
264271
(void *) ml->funcs, NULL, hal_ml_exit_backend, ml->backend_library_name);
265272

273+
g_free (ml->backend_library_name);
266274
g_free (ml);
267275

268276
if (ret != 0) {

0 commit comments

Comments
 (0)