Fix memory leak 75/154475/3
authorjusung son <jusung07.son@samsung.com>
Tue, 10 Oct 2017 09:01:05 +0000 (18:01 +0900)
committerjusung son <jusung07.son@samsung.com>
Wed, 11 Oct 2017 02:24:58 +0000 (11:24 +0900)
Change-Id: Ib81bbeabfcd374de1e505b05d93d876686863b2c
Signed-off-by: jusung son <jusung07.son@samsung.com>
src/eventsystem.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index e51db0b..56d210c
@@ -851,14 +851,14 @@ static int __eventsystem_send_event(GDBusConnection *conn, eventinfo_s *evti, bu
        _D("object_path(%s)", evti->object_path);
        _D("member_name(%s)", evti->member_name);
 
+       bundle_free_encoded_rawdata(&raw);
+
        if (ret == FALSE) {
                _E("Unable to connect to dbus: %s", error->message);
                g_error_free(error);
                return ES_R_ERROR;
        }
 
-       bundle_free_encoded_rawdata(&raw);
-
        return ES_R_OK;
 }
 
@@ -1717,7 +1717,7 @@ int eventsystem_keep_last_event_data(const char *event_name)
        item->param = NULL;
        item->trusted_param = NULL;
 
-       g_hash_table_insert(last_data_tbl, (char *)event_name, item);
+       g_hash_table_insert(last_data_tbl, item->event_name, item);
 
        ret = eventsystem_register_event(SYS_EVENT_REQUEST_LAST_DATA,
                        &reg_id, _send_last_user_event, NULL);
@@ -1953,6 +1953,7 @@ int eventsystem_application_finalize(void)
        GHashTableIter iter;
        char *key_item;
        char *val_item;
+       struct last_data_item *last_item;
 
        _D("release all resouces");
 
@@ -1998,20 +1999,21 @@ int eventsystem_application_finalize(void)
                g_hash_table_iter_init(&iter, last_data_tbl);
 
                while (g_hash_table_iter_next(&iter, &key, &value)) {
-                       key_item = (char *)key;
-                       if (key_item)
-                               free(key_item);
-                       else
-                               _E("last_data_tbl, val_item is NULL");
-
-                       val_item = (char *)value;
-                       if (val_item)
-                               free(val_item);
-                       else
+                       last_item = (struct last_data_item *)value;
+                       if (last_item) {
+                               if (last_item->event_name)
+                                       free(last_item->event_name);
+                               if (last_item->param)
+                                       g_variant_unref(last_item->param);
+                               if (last_item->trusted_param)
+                                       g_variant_unref(last_item->trusted_param);
+                               free(last_item);
+                       } else {
                                _E("last_data_tbl, val_item is NULL");
+                       }
                        g_hash_table_iter_remove(&iter);
                }
-               g_hash_table_unref(check_tbl);
+               g_hash_table_unref(last_data_tbl);
        }
 
        FREE_AND_NULL(s_info.own_name_system_bus);