Fix memory leak 86/95086/2
authorWonnam Jang <wn.jang@samsung.com>
Wed, 2 Nov 2016 09:02:48 +0000 (18:02 +0900)
committerWonnam Jang <wn.jang@samsung.com>
Wed, 2 Nov 2016 09:03:43 +0000 (18:03 +0900)
Change-Id: I6e72255dd1741c1c77ac1f5a2c174c2402a884e2
Signed-off-by: Wonnam Jang <wn.jang@samsung.com>
src/vc_elm_core.c

index 594198b0ffb58b86b66384f301d06e600e489a2c..706ec14a9e95a844d3ea5015e73495f891268a27 100644 (file)
@@ -192,6 +192,7 @@ static void __rotation(void *data, Evas_Object *obj, void *event_info);
 
 static int __is_hidden_widget(Evas_Object *obj);
 
+static void __vc_elm_core_free_default_actions();
 
 /**
  * @brief Function that returns the name of the widget
@@ -470,6 +471,8 @@ void _vc_elm_core_fini()
                g_allowed_text_part_list = NULL;
        }
 
+       __vc_elm_core_free_default_actions();
+
        eina_hash_free(g_widget_info_hash);
        g_widget_info_hash = NULL;
 
@@ -1014,6 +1017,45 @@ struct vc_elm_core_widget_info *_vc_elm_core_register_widget(const char *widget_
        return info;
 }
 
+static void __vc_elm_core_free_action(const char* widget_name)
+{
+       struct vc_elm_core_widget_info *info = NULL;
+       info = eina_hash_find(g_widget_info_hash, widget_name);
+
+       if (!info) {
+               VC_ELM_LOG_ERR("Widget was not registered: %s", widget_name);
+       } else {
+               free(info->actions);
+               info->actions = NULL;
+               VC_ELM_LOG_ERR("Widget action is freed: %s", widget_name);
+       }
+}
+
+static void __vc_elm_core_free_default_actions()
+{
+       __vc_elm_core_free_action("Elm_Genlist");
+       __vc_elm_core_free_action("Elm_Radio");
+       __vc_elm_core_free_action("Elm_Bubble");
+       __vc_elm_core_free_action("Elm_Check");
+       __vc_elm_core_free_action("Elm_List");
+       __vc_elm_core_free_action("Elm_Slider");
+       __vc_elm_core_free_action("Elm_Colorselector");
+       __vc_elm_core_free_action("simple_hue_colorbar_activator");
+       __vc_elm_core_free_action("simple_saturation_colorbar_activator");
+       __vc_elm_core_free_action("simple_value_colorbar_activator");
+       __vc_elm_core_free_action("Elm_Spinner");
+       __vc_elm_core_free_action("Elm_Panes");
+       __vc_elm_core_free_action("Elm_Toolbar");
+       __vc_elm_core_free_action("Elm_Entry");
+       __vc_elm_core_free_action("Elm_Multibuttonentry");
+       __vc_elm_core_free_action("elm_item");
+       __vc_elm_core_free_action("Elm_Gengrid");
+       __vc_elm_core_free_action("Elm_Button");
+       __vc_elm_core_free_action("Elm_Scroller");
+       __vc_elm_core_free_action("Elm_Hoversel");
+       __vc_elm_core_free_action("Elm_Label");
+}
+
 void _vc_elm_core_register_action(struct vc_elm_core_widget_info *info, const char *action_name, void *data, vc_elm_action_activator_cb action_activator_func)
 {
        unsigned int idx = 0;