@@ -61,7 +61,7 @@ hal_ml_exit_backend (void *data, void *user_data)
6161}
6262
6363static 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