Skip to content

Commit ab35b5c

Browse files
committed
Replace g_free with g_clear_pointer to prevent dangling pointers
- This change replaces g_free with g_clear_pointer for struct members to ensure pointers are set to NULL after freeing. - Local variables are excluded from this change. Signed-off-by: hyunil park <[email protected]>
1 parent b80c7f5 commit ab35b5c

7 files changed

+33
-46
lines changed

c/src/ml-api-common.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ ml_tensors_info_set_tensor_name (ml_tensors_info_h info,
365365
return ML_ERROR_INVALID_PARAMETER;
366366
}
367367

368-
g_free (_info->name);
368+
g_clear_pointer (&_info->name, g_free);
369369
_info->name = g_strdup (name);
370370

371371
G_UNLOCK_UNLESS_NOLOCK (*tensors_info);
@@ -714,8 +714,7 @@ _ml_tensors_data_destroy_internal (ml_tensors_data_h data, gboolean free_data)
714714
} else {
715715
for (i = 0; i < ML_TENSOR_SIZE_LIMIT; i++) {
716716
if (_data->tensors[i].data) {
717-
g_free (_data->tensors[i].data);
718-
_data->tensors[i].data = NULL;
717+
g_clear_pointer (&_data->tensors[i].data, g_free);
719718
}
720719
}
721720
}
@@ -1101,7 +1100,7 @@ ml_tensors_data_set_tensor_data (ml_tensors_data_h data, unsigned int index,
11011100
_ml_logw
11021101
("Memory allocation was not performed in ml_tensor_data_create() when tensor format is flexible.");
11031102

1104-
g_free (_data->tensors[index].data);
1103+
g_clear_pointer (&_data->tensors[index].data, g_free);
11051104

11061105
status = _ml_tensor_data_alloc (_data, index, data_size);
11071106
if (status != ML_ERROR_NONE) {

c/src/ml-api-inference-pipeline.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ pipe_custom_remove_data (const pipe_custom_type_e type, const gchar * name)
185185

186186
g_ml_custom_data = g_list_delete_link (g_ml_custom_data, link);
187187

188-
g_free (data->name);
188+
g_clear_pointer (&data->name, g_free);
189189
g_free (data);
190190
}
191191

@@ -516,7 +516,7 @@ free_element_handle (gpointer data)
516516
NULL, NULL);
517517
}
518518

519-
g_free (item->callback_info);
519+
g_clear_pointer (&item->callback_info, g_free);
520520
item->callback_info = NULL;
521521
g_free (item);
522522
}
@@ -576,7 +576,7 @@ cleanup_node (gpointer data)
576576
e->custom_destroy (e->custom_data, e);
577577
}
578578

579-
g_free (e->name);
579+
g_clear_pointer (&e->name, g_free);
580580
if (e->src)
581581
gst_object_unref (e->src);
582582
if (e->sink)
@@ -605,7 +605,7 @@ cleanup_resource (gpointer data)
605605
release_tizen_resource (res->handle, res->type);
606606
}
607607

608-
g_free (res->type);
608+
g_clear_pointer (&res->type, g_free);
609609
g_free (res);
610610
}
611611

@@ -2137,8 +2137,7 @@ ml_pipeline_switch_get_pad_list (ml_pipeline_switch_h h, char ***list)
21372137

21382138
if (i > counter) {
21392139
g_list_free_full (dllist, g_free); /* This frees all strings as well */
2140-
g_free (*list);
2141-
*list = NULL;
2140+
g_clear_pointer (list, g_free);
21422141

21432142
_ml_error_report
21442143
("Internal data inconsistency. This could be a bug in nnstreamer. Switch [%s].",
@@ -2746,7 +2745,7 @@ ml_pipeline_custom_free_handle (ml_custom_filter_s * custom)
27462745
if (custom) {
27472746
g_mutex_lock (&custom->lock);
27482747

2749-
g_free (custom->name);
2748+
g_clear_pointer (&custom->name, g_free);
27502749
ml_tensors_info_destroy (custom->in_info);
27512750
ml_tensors_info_destroy (custom->out_info);
27522751

@@ -2808,7 +2807,9 @@ ml_pipeline_custom_invoke (void *data, const GstTensorFilterProperties * prop,
28082807
g_mutex_unlock (&c->lock);
28092808
/* NOTE: DO NOT free tensor data */
28102809
_ml_tensors_data_destroy_internal (in_data, FALSE);
2810+
in_data = NULL;
28112811
_ml_tensors_data_destroy_internal (out_data, FALSE);
2812+
out_data = NULL;
28122813

28132814
return status;
28142815
}
@@ -3056,7 +3057,7 @@ ml_pipeline_if_custom_free (ml_if_custom_s * custom)
30563057
if (custom) {
30573058
g_mutex_lock (&custom->lock);
30583059

3059-
g_free (custom->name);
3060+
g_clear_pointer (&custom->name, g_free);
30603061

30613062
g_mutex_unlock (&custom->lock);
30623063
g_mutex_clear (&custom->lock);

c/src/ml-api-inference-tizen-privilege-check.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,8 @@ ml_tizen_mm_res_release_rm (tizen_mm_handle_s * mm_handle)
378378
}
379379

380380
for (i = 0; i < device->allocated_num; i++) {
381-
g_free (device->device_node[i]);
382-
g_free (device->omx_comp_name[i]);
381+
g_clear_pointer (&device->device_node[i], g_free);
382+
g_clear_pointer (&device->omx_comp_name[i], g_free);
383383
}
384384
}
385385

@@ -393,11 +393,9 @@ ml_tizen_mm_res_release_rm (tizen_mm_handle_s * mm_handle)
393393
_ml_loge ("Failed to unregister resource manager (%d).", ret);
394394
}
395395

396-
g_free (mm_handle->priv);
397-
396+
g_clear_pointer (&mm_handle->priv, g_free);
398397
mm_handle->rm_h = NULL;
399398
mm_handle->invalid = FALSE;
400-
mm_handle->priv = NULL;
401399
}
402400

403401
/**

c/src/ml-api-service-agent-client.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -413,9 +413,8 @@ _ml_service_pipeline_release_internal (ml_service_s * mls)
413413
}
414414
}
415415

416-
g_free (server->service_name);
417-
g_free (server);
418-
mls->priv = NULL;
416+
g_clear_pointer (&server->service_name, g_free);
417+
g_clear_pointer (&mls->priv, g_free);
419418

420419
return ML_ERROR_NONE;
421420
}

c/src/ml-api-service-extension.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ _ml_extension_node_info_free (gpointer data)
127127
if (node_info->info)
128128
ml_tensors_info_destroy (node_info->info);
129129

130-
g_free (node_info->name);
130+
g_clear_pointer (&node_info->name, g_free);
131131
g_free (node_info);
132132
}
133133

@@ -158,8 +158,8 @@ _ml_extension_msg_free (gpointer data)
158158
ml_tensors_data_destroy (msg->input);
159159
if (msg->output)
160160
ml_tensors_data_destroy (msg->output);
161+
g_clear_pointer (&msg->name, g_free);
161162

162-
g_free (msg->name);
163163
g_free (msg);
164164
}
165165

c/src/ml-api-service-offloading.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,10 @@ _mlrs_set_edge_info (edge_info_s * edge_info, nns_edge_h edge_h)
166166
static void
167167
_mlrs_release_edge_info (edge_info_s * edge_info)
168168
{
169-
g_free (edge_info->dest_host);
170-
g_free (edge_info->host);
171-
g_free (edge_info->topic);
172-
g_free (edge_info->id);
169+
g_clear_pointer (&edge_info->dest_host, g_free);
170+
g_clear_pointer (&edge_info->host, g_free);
171+
g_clear_pointer (&edge_info->topic, g_free);
172+
g_clear_pointer (&edge_info->id, g_free);
173173
g_free (edge_info);
174174
}
175175

@@ -727,9 +727,8 @@ _ml_service_offloading_release_internal (ml_service_s * mls)
727727
offloading_s->service_table = NULL;
728728
}
729729

730-
g_free (offloading_s->path);
731-
g_free (offloading_s);
732-
mls->priv = NULL;
730+
g_clear_pointer (&offloading_s->path, g_free);
731+
g_clear_pointer (&mls->priv, g_free);
733732

734733
return ML_ERROR_NONE;
735734
}
@@ -764,7 +763,7 @@ _ml_service_offloading_set_information (ml_service_h handle, const gchar * name,
764763
"Write permission to dir '%s' is denied.", value);
765764
}
766765

767-
g_free (offloading_s->path);
766+
g_clear_pointer (&offloading_s->path, g_free);
768767
offloading_s->path = g_strdup (value);
769768

770769
if (offloading_s->offloading_mode == ML_SERVICE_OFFLOADING_MODE_TRAINING) {

c/src/ml-api-service-training-offloading.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ _training_offloading_node_info_free (gpointer data)
9898
if (!node_info)
9999
return;
100100

101-
g_free (node_info->name);
101+
g_clear_pointer (&node_info->name, g_free);
102102
g_free (node_info);
103103
}
104104

@@ -641,7 +641,7 @@ _ml_service_training_offloading_set_path (ml_service_s * mls,
641641
ret = _training_offloading_get_priv (mls, &training_s);
642642
g_return_val_if_fail (ret == ML_ERROR_NONE, ret);
643643

644-
g_free (training_s->path);
644+
g_clear_pointer (&training_s->path, g_free);
645645
training_s->path = g_strdup (path);
646646

647647
return ret;
@@ -916,20 +916,11 @@ _ml_service_training_offloading_destroy (ml_service_s * mls)
916916
training_s->pipeline_h = NULL;
917917
}
918918

919-
g_free (training_s->path);
920-
training_s->path = NULL;
921-
922-
g_free (training_s->trained_model_path);
923-
training_s->trained_model_path = NULL;
924-
925-
g_free (training_s->receiver_pipe_json_str);
926-
training_s->receiver_pipe_json_str = NULL;
927-
928-
g_free (training_s->receiver_pipe);
929-
training_s->receiver_pipe = NULL;
930-
931-
g_free (training_s->sender_pipe);
932-
training_s->sender_pipe = NULL;
919+
g_clear_pointer (&training_s->path, g_free);
920+
g_clear_pointer (&training_s->trained_model_path, g_free);
921+
g_clear_pointer (&training_s->receiver_pipe_json_str, g_free);
922+
g_clear_pointer (&training_s->receiver_pipe, g_free);
923+
g_clear_pointer (&training_s->sender_pipe, g_free);
933924

934925
g_free (training_s);
935926

0 commit comments

Comments
 (0)