From e14fd9ead044e89467a2e007578235fc04a85f35 Mon Sep 17 00:00:00 2001 From: Jaeyun Date: Fri, 8 Jul 2022 20:22:46 +0900 Subject: [PATCH] [Util] macro safe-free Remove glib, check mem ptr to release allocated memory. Signed-off-by: Jaeyun --- .../nnstreamer-edge-common.c | 26 ++++++++---- .../nnstreamer-edge-common.h | 12 ++++-- .../nnstreamer-edge-internal.c | 40 +++++++++---------- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-common.c b/src/libnnstreamer-edge/nnstreamer-edge-common.c index 217571d..7c29e7f 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-common.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-common.c @@ -48,9 +48,19 @@ nns_edge_get_available_port (void) return port; } +/** + * @brief Free allocated memory. + */ +void +nns_edge_free (void *data) +{ + if (data) + free (data); +} + /** * @brief Allocate new memory and copy bytes. - * @note Caller should release newly allocated memory using free(). + * @note Caller should release newly allocated memory using nns_edge_free(). */ void * nns_edge_memdup (const void *data, size_t size) @@ -72,7 +82,7 @@ nns_edge_memdup (const void *data, size_t size) /** * @brief Allocate new memory and copy string. - * @note Caller should release newly allocated string using free(). + * @note Caller should release newly allocated string using nns_edge_free(). */ char * nns_edge_strdup (const char *str) @@ -97,7 +107,7 @@ nns_edge_strdup (const char *str) /** * @brief Allocate new memory and print formatted string. - * @note Caller should release newly allocated string using free(). + * @note Caller should release newly allocated string using nns_edge_free(). */ char * nns_edge_strdup_printf (const char *format, ...) @@ -167,7 +177,7 @@ nns_edge_event_destroy (nns_edge_event_h event_h) if (ee->data.destroy_cb) ee->data.destroy_cb (ee->data.data); - g_free (ee); + SAFE_FREE (ee); return NNS_EDGE_ERROR_NONE; } @@ -309,8 +319,8 @@ nns_edge_data_create (nns_edge_data_h * data_h) memset (ed, 0, sizeof (nns_edge_data_s)); ed->magic = NNS_EDGE_MAGIC; - ed->info_table = - g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + ed->info_table = g_hash_table_new_full (g_str_hash, g_str_equal, + nns_edge_free, nns_edge_free); *data_h = ed; return NNS_EDGE_ERROR_NONE; @@ -341,7 +351,7 @@ nns_edge_data_destroy (nns_edge_data_h data_h) g_hash_table_destroy (ed->info_table); - g_free (ed); + SAFE_FREE (ed); return NNS_EDGE_ERROR_NONE; } @@ -401,7 +411,7 @@ nns_edge_data_copy (nns_edge_data_h data_h, nns_edge_data_h * new_data_h) copied->data[i].data = nns_edge_memdup (ed->data[i].data, ed->data[i].data_len); copied->data[i].data_len = ed->data[i].data_len; - copied->data[i].destroy_cb = g_free; + copied->data[i].destroy_cb = nns_edge_free; } g_hash_table_iter_init (&iter, ed->info_table); diff --git a/src/libnnstreamer-edge/nnstreamer-edge-common.h b/src/libnnstreamer-edge/nnstreamer-edge-common.h index 8864fec..24a98a4 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-common.h +++ b/src/libnnstreamer-edge/nnstreamer-edge-common.h @@ -34,6 +34,7 @@ extern "C" { #endif #define STR_IS_VALID(s) ((s) && (s)[0] != '\0') +#define SAFE_FREE(p) do { if (p) { free (p); (p) = NULL; } } while (0) #define NNS_EDGE_MAGIC 0xfeedfeed #define NNS_EDGE_MAGIC_DEAD 0xdeaddead @@ -89,21 +90,26 @@ typedef struct { */ int nns_edge_get_available_port (void); +/** + * @brief Free allocated memory. + */ +void nns_edge_free (void *data); + /** * @brief Allocate new memory and copy bytes. - * @note Caller should release newly allocated memory using free(). + * @note Caller should release newly allocated memory using nns_edge_free(). */ void *nns_edge_memdup (const void *data, size_t size); /** * @brief Allocate new memory and copy string. - * @note Caller should release newly allocated string using free(). + * @note Caller should release newly allocated string using nns_edge_free(). */ char *nns_edge_strdup (const char *str); /** * @brief Allocate new memory and print formatted string. - * @note Caller should release newly allocated string using free(). + * @note Caller should release newly allocated string using nns_edge_free(). */ char *nns_edge_strdup_printf (const char *format, ...); diff --git a/src/libnnstreamer-edge/nnstreamer-edge-internal.c b/src/libnnstreamer-edge/nnstreamer-edge-internal.c index 8cdb003..23c146e 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-internal.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-internal.c @@ -220,9 +220,7 @@ _nns_edge_cmd_clear (nns_edge_cmd_s * cmd) cmd->info.magic = NNS_EDGE_MAGIC_DEAD; for (i = 0; i < cmd->info.num; i++) { - if (cmd->mem[i]) - free (cmd->mem[i]); - cmd->mem[i] = NULL; + SAFE_FREE (cmd->mem[i]); } } @@ -337,8 +335,7 @@ _nns_edge_cmd_receive (nns_edge_conn_s * conn, nns_edge_cmd_s * cmd) if (ret != NNS_EDGE_ERROR_NONE) { for (i = 0; i < n; i++) { - free (cmd->mem[i]); - cmd->mem[i] = NULL; + SAFE_FREE (cmd->mem[i]); } } @@ -423,8 +420,8 @@ _nns_edge_close_connection (nns_edge_conn_s * conn) g_clear_object (&conn->socket); } - g_free (conn->ip); - g_free (conn); + SAFE_FREE (conn->ip); + SAFE_FREE (conn); return true; } @@ -488,7 +485,7 @@ _nns_edge_remove_connection (gpointer data) _nns_edge_close_connection (cdata->sink_conn); cdata->src_conn = cdata->sink_conn = NULL; - g_free (cdata); + SAFE_FREE (cdata); } } @@ -690,7 +687,7 @@ _nns_edge_message_handler (void *thread_data) eh = (nns_edge_handle_s *) _tdata->eh; conn = _tdata->conn; client_id = _tdata->client_id; - g_free (_tdata); + SAFE_FREE (_tdata); conn->running = 1; while (conn->running) { @@ -731,7 +728,7 @@ _nns_edge_message_handler (void *thread_data) /* Set client ID in edge data */ val = nns_edge_strdup_printf ("%ld", (long int) client_id); nns_edge_data_set_info (data_h, "client_id", val); - g_free (val); + SAFE_FREE (val); for (i = 0; i < cmd.info.num; i++) { nns_edge_data_add (data_h, cmd.mem[i], cmd.info.mem_size[i], NULL); @@ -786,7 +783,7 @@ _nns_edge_create_message_thread (nns_edge_handle_s * eh, nns_edge_conn_s * conn, nns_edge_loge ("Failed to create message handler thread."); conn->running = 0; conn->msg_thread = 0; - g_free (thread_data); + SAFE_FREE (thread_data); return NNS_EDGE_ERROR_IO; } @@ -909,7 +906,7 @@ error: g_socket_listener_accept_socket_async (eh->listener, NULL, (GAsyncReadyCallback) _nns_edge_accept_socket_async_cb, eh); - g_free (connected_ip); + SAFE_FREE (connected_ip); } /** @@ -1060,14 +1057,15 @@ nns_edge_release_handle (nns_edge_h edge_h) g_hash_table_destroy (eh->conn_table); eh->conn_table = NULL; - g_free (eh->id); - g_free (eh->topic); - g_free (eh->ip); - g_free (eh->recv_ip); + SAFE_FREE (eh->id); + SAFE_FREE (eh->topic); + SAFE_FREE (eh->ip); + SAFE_FREE (eh->recv_ip); + SAFE_FREE (eh->caps_str); nns_edge_unlock (eh); nns_edge_lock_destroy (eh); - g_free (eh); + SAFE_FREE (eh); return NNS_EDGE_ERROR_NONE; } @@ -1406,15 +1404,15 @@ nns_edge_set_info (nns_edge_h edge_h, const char *key, const char *value) */ if (0 == g_ascii_strcasecmp (key, "CAPS")) { ret_str = nns_edge_strdup_printf ("%s%s", _STR_NULL (eh->caps_str), value); - g_free (eh->caps_str); + SAFE_FREE (eh->caps_str); eh->caps_str = ret_str; } else if (0 == g_ascii_strcasecmp (key, "IP")) { - g_free (eh->recv_ip); + SAFE_FREE (eh->recv_ip); eh->recv_ip = nns_edge_strdup (value); } else if (0 == g_ascii_strcasecmp (key, "PORT")) { eh->recv_port = g_ascii_strtoll (value, NULL, 10); } else if (0 == g_ascii_strcasecmp (key, "TOPIC")) { - g_free (eh->topic); + SAFE_FREE (eh->topic); eh->topic = nns_edge_strdup (value); } else { nns_edge_logw ("Failed to set edge info. Unknown key: %s", key); @@ -1465,7 +1463,7 @@ nns_edge_respond (nns_edge_h edge_h, nns_edge_data_h data_h) } client_id = g_ascii_strtoll (val, NULL, 10); - g_free (val); + SAFE_FREE (val); conn_data = _nns_edge_get_connection (eh, client_id); if (!conn_data) { -- 2.34.1