Change arping related static memory to dynamic memory 34/194734/1
authorYu <jiung.yu@samsung.com>
Fri, 7 Dec 2018 05:43:19 +0000 (14:43 +0900)
committerYu <jiung.yu@samsung.com>
Fri, 7 Dec 2018 05:44:19 +0000 (14:44 +0900)
Change-Id: Ifb08c2aca2267c47a7790e47219baa1d0c17c62d
Signed-off-by: Yu Jiung <jiung.yu@samsung.com>
src/inm-arping.c

index a06234d4e4af17d469c675fef1de5f14942afad5..7e57db628aa04f953cf7bd4b9f502257d1230596 100644 (file)
@@ -72,10 +72,14 @@ typedef struct {
        gboolean gw_check;
 } arping_data_s;
 
-static gboolean is_initialized;
-arping_callback arping_cb;
-gpointer cb_user_data;
-GSList *arping_data_list;
+typedef struct {
+       arping_callback arping_cb;
+       gpointer cb_user_data;
+       GSList *arping_data_list;
+
+} arping_mon_s;
+
+arping_mon_s *g_p_arping_mon = NULL;
 
 static void __stop_arping(GQuark key_id,
                gpointer value,
@@ -86,17 +90,17 @@ static gboolean __arp_user_timeout_cb(gpointer data)
        __INM_FUNC_ENTER__;
        arping_data_s *arping_data;
 
-       if (!data)
+       if (!data || !g_p_arping_mon)
                return FALSE;
 
        arping_data = (arping_data_s *)data;
        __stop_arping(0, arping_data, NULL);
-       if (arping_cb)
-               arping_cb(arping_data->found,
+       if (g_p_arping_mon->arping_cb)
+               g_p_arping_mon->arping_cb(arping_data->found,
                                arping_data->if_name,
                                arping_data->target_ip,
                                arping_data->gw_check,
-                               cb_user_data);
+                               g_p_arping_mon->cb_user_data);
 
        arping_data->arp_user_timer_source_id = 0;
        return G_SOURCE_REMOVE;
@@ -107,7 +111,7 @@ static void __check_arp_receive(arp_message_s* ah, gpointer data)
        arping_data_s *arping_data;
        inm_util_arp_data_s *arp_data;
 
-       if (!data || !ah)
+       if (!data || !ah || !g_p_arping_mon)
                return;
 
        arping_data = (arping_data_s *)data;
@@ -121,12 +125,12 @@ static void __check_arp_receive(arp_message_s* ah, gpointer data)
 
        INM_LOGI("arp found");
        arping_data->found = TRUE;
-       if (arping_cb)
-               arping_cb(TRUE,
+       if (g_p_arping_mon->arping_cb)
+               g_p_arping_mon->arping_cb(TRUE,
                                arping_data->if_name,
                                arping_data->target_ip,
                                arping_data->gw_check,
-                               cb_user_data);
+                               g_p_arping_mon->cb_user_data);
 
        return;
 }
@@ -216,7 +220,7 @@ arping_data_s *__get_arping_data(gchar *if_name, gchar *target_ip)
        GSList *node = NULL;
        arping_data_s *cand = NULL;;
 
-       node = arping_data_list;
+       node = g_p_arping_mon->arping_data_list;
 
        while (node) {
                cand = node->data;
@@ -269,8 +273,8 @@ arping_data_s *__create_arping_data(gchar *if_name, gchar *target_ip)
        arping_data->if_name = g_strdup(if_name);
        arping_data->target_ip = g_strdup(target_ip);
 
-       arping_data_list =
-                       g_slist_prepend(arping_data_list, arping_data);
+       g_p_arping_mon->arping_data_list =
+                       g_slist_prepend(g_p_arping_mon->arping_data_list, arping_data);
 
        arping_data->arp_data.sock = -1;
 
@@ -284,7 +288,7 @@ int inm_arping_start(gchar *if_name, gchar *target_ip, gint timeout, gboolean is
 
        __INM_FUNC_ENTER__;
 
-       if (!is_initialized) {
+       if (!g_p_arping_mon) {
                __INM_FUNC_EXIT__;
                return INM_ARPING_ERROR_NOT_INITIALIZED;
        }
@@ -335,7 +339,7 @@ int inm_arping_stop(gchar *if_name, gchar *target_ip)
 
        __INM_FUNC_ENTER__;
 
-       if (!is_initialized) {
+       if (!g_p_arping_mon) {
                __INM_FUNC_EXIT__;
                return INM_ARPING_ERROR_NOT_INITIALIZED;
        }
@@ -354,8 +358,8 @@ int inm_arping_stop(gchar *if_name, gchar *target_ip)
        }
        REMOVE_G_SOURCE(arping_data->arp_user_timer_source_id);
 
-       arping_data_list =
-                       g_slist_remove(arping_data_list, arping_data);
+       g_p_arping_mon->arping_data_list =
+                       g_slist_remove(g_p_arping_mon->arping_data_list, arping_data);
 
        g_free(arping_data->if_name);
        g_free(arping_data->target_ip);
@@ -370,13 +374,13 @@ int inm_arping_set_callback(arping_callback cb, gpointer user_data)
        gint ret = INM_ARPING_ERROR_NONE;
 
        __INM_FUNC_ENTER__;
-       if (!is_initialized) {
+       if (!g_p_arping_mon) {
                __INM_FUNC_EXIT__;
                return INM_ARPING_ERROR_NOT_INITIALIZED;
        }
 
-       arping_cb = cb;
-       cb_user_data = user_data;
+       g_p_arping_mon->arping_cb = cb;
+       g_p_arping_mon->cb_user_data = user_data;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -387,13 +391,13 @@ int inm_arping_unset_callback()
        gint ret = INM_ARPING_ERROR_NONE;
 
        __INM_FUNC_ENTER__;
-       if (!is_initialized) {
+       if (!g_p_arping_mon) {
                __INM_FUNC_EXIT__;
                return INM_ARPING_ERROR_NOT_INITIALIZED;
        }
 
-       arping_cb = NULL;
-       cb_user_data = NULL;
+       g_p_arping_mon->arping_cb = NULL;
+       g_p_arping_mon->cb_user_data = NULL;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -405,7 +409,14 @@ int inm_arping_init()
 
        __INM_FUNC_ENTER__;
 
-       is_initialized = TRUE;
+       if (g_p_arping_mon)
+               return ret;
+
+       g_p_arping_mon = g_try_malloc0(sizeof(arping_mon_s));
+       if (!g_p_arping_mon) {
+               __INM_FUNC_EXIT__;
+               return INM_ARPING_ERROR_OPERATION_FAILED;
+       }
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -417,14 +428,13 @@ int inm_arping_deinit()
 
        __INM_FUNC_ENTER__;
 
-       if (!is_initialized) {
+       if (!g_p_arping_mon) {
                __INM_FUNC_EXIT__;
                return INM_ARPING_ERROR_NOT_INITIALIZED;
        }
-       g_slist_free_full(arping_data_list, __destroy_arping_data);
-       arping_data_list = NULL;
-       arping_cb = NULL;
-       cb_user_data = NULL;
+       g_slist_free_full(g_p_arping_mon->arping_data_list, __destroy_arping_data);
+       g_free(g_p_arping_mon);
+       g_p_arping_mon = NULL;
 
        __INM_FUNC_EXIT__;
        return ret;