From ce4e68a260ac1a6a98f9dfef915659ca5adb8216 Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Fri, 3 Jul 2020 13:29:03 +0900 Subject: [PATCH] Wrap g_hash_table_remove() with ms_node_remove_from_table() [Version] 0.1.85 [Issue Type] Refactoring Change-Id: Ic6a5821e3231a90c3873aa9a67688cbfc91f63aa Signed-off-by: Sangchul Lee --- include/media_streamer_node.h | 3 ++- packaging/capi-media-streamer.spec | 2 +- src/media_streamer.c | 7 +------ src/media_streamer_node.c | 20 +++++++++++++++++--- src/media_streamer_priv.c | 2 +- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/include/media_streamer_node.h b/include/media_streamer_node.h index 411792a..cdba544 100644 --- a/include/media_streamer_node.h +++ b/include/media_streamer_node.h @@ -86,7 +86,7 @@ int ms_node_insert_into_table(GHashTable *nodes_table, media_streamer_node_s *no /** * @brief Removes media streamer node from nodes table. */ -void ms_node_remove_from_table(void *data); +int ms_node_remove_from_table(GHashTable *nodes_table, media_streamer_node_s *node); /** * @brief Reads node parameters from user's bundle object. @@ -123,6 +123,7 @@ gboolean ms_src_node_prepare_iter(const GValue *item, GValue *g_ret, gpointer us gboolean ms_node_resources_acquire_iter(const GValue *item, GValue *ret, gpointer user_data); gboolean ms_node_resources_release_iter(const GValue *item, GValue *ret, gpointer user_data); gboolean ms_node_dpm_policy_check_iter(const GValue *item, GValue *ret, gpointer user_data); +void ms_node_remove_from_table_cb(void *data); GstElement *ms_webrtc_node_get_webrtcbin(media_streamer_node_s *webrtc_node); #ifdef __cplusplus diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index 9a43e86..496007e 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -1,6 +1,6 @@ Name: capi-media-streamer Summary: A Media Streamer API -Version: 0.1.84 +Version: 0.1.85 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_streamer.c b/src/media_streamer.c index 5094df9..2f1b04c 100644 --- a/src/media_streamer.c +++ b/src/media_streamer.c @@ -154,12 +154,7 @@ int media_streamer_node_remove(media_streamer_h streamer, media_streamer_node_h g_mutex_lock(&ms_streamer->mutex_lock); - if (g_hash_table_remove(ms_streamer->nodes_table, (gpointer) ms_node->name)) { - ms_info("Node [%s] removed from Media Streamer", ms_node->name); - } else { - ms_error("Error: Node [%s] remove failed", ms_node->name); - ret = MEDIA_STREAMER_ERROR_INVALID_OPERATION; - } + ret = ms_node_remove_from_table(ms_streamer->nodes_table, ms_node); g_mutex_unlock(&ms_streamer->mutex_lock); diff --git a/src/media_streamer_node.c b/src/media_streamer_node.c index 11aac47..f8a8826 100644 --- a/src/media_streamer_node.c +++ b/src/media_streamer_node.c @@ -1053,7 +1053,22 @@ int ms_node_insert_into_table(GHashTable *nodes_table, media_streamer_node_s *no return MEDIA_STREAMER_ERROR_NONE; } -void ms_node_remove_from_table(void *data) +int ms_node_remove_from_table(GHashTable *nodes_table, media_streamer_node_s *node) +{ + ms_retvm_if(nodes_table == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "nodes_table is NULL"); + ms_retvm_if(node == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL"); + + /* Removal element of this node from bin will be performed + * in the callback - ms_node_remove_from_table_cb(). */ + if (!g_hash_table_remove(nodes_table, (gpointer) node->name)) { + ms_error("Failed to remove node [%s] from table", node->name); + return MEDIA_STREAMER_ERROR_INVALID_OPERATION; + } + + return MEDIA_STREAMER_ERROR_NONE; +} + +void ms_node_remove_from_table_cb(void *data) { media_streamer_node_s *node = (media_streamer_node_s *) data; @@ -1067,11 +1082,10 @@ void ms_node_remove_from_table(void *data) ms_bin_remove_element(node->gst_element); ms_info("Node [%s] removed from Media Streamer", node->name); } else { - ms_error("Error: Node [%s] remove failed", node->name); + ms_error("Failed to unlink element of node [%s]", node->name); } ms_debug_fleave(); - } static gboolean __ms_src_need_typefind(GstPad *src_pad) diff --git a/src/media_streamer_priv.c b/src/media_streamer_priv.c index 0fabbb9..cf6ea83 100644 --- a/src/media_streamer_priv.c +++ b/src/media_streamer_priv.c @@ -117,7 +117,7 @@ int ms_create(media_streamer_s *ms_streamer) ms_load_ini_settings(&ms_streamer->ini); - ms_streamer->nodes_table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, ms_node_remove_from_table); + ms_streamer->nodes_table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, ms_node_remove_from_table_cb); ms_retvm_if(ms_streamer->nodes_table == NULL, MEDIA_STREAMER_ERROR_INVALID_OPERATION, "Error creating hash table"); ret = ms_pipeline_create(ms_streamer); -- 2.7.4