Fix glib critical 74/277874/6
authorInkyun Kil <inkyun.kil@samsung.com>
Thu, 14 Jul 2022 07:34:07 +0000 (16:34 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Tue, 26 Jul 2022 00:18:40 +0000 (09:18 +0900)
- If g_hash_table value is null, it shows glib critical error

Change-Id: Idb18f8306b9e3099dd6221ba7c274078b9612338
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
src/eventsystem.c

index 7d4c96e..03b5e7d 100644 (file)
@@ -886,6 +886,42 @@ static int __eventsystem_send_trusted_event(GDBusConnection *conn, eventinfo_s *
        return ES_R_OK;
 }
 
+static int __update_last_data_item(eventinfo_s *evti, bundle *data)
+{
+       struct last_data_item *item;
+       bundle_raw *raw = NULL;
+       int len;
+
+       if (!last_data_tbl)
+               return ES_R_OK;
+
+       item = (struct last_data_item *)g_hash_table_lookup(last_data_tbl,
+                       evti->event_name);
+       if (item == NULL)
+               return ES_R_OK;
+
+       if (bundle_encode(data, &raw, &len)) {
+               _E("Unable to encode bundle");
+               return ES_R_ERROR;
+       }
+
+       if (!evti->is_trusted) {
+               if (item->param)
+                       g_variant_unref(item->param);
+               item->param = g_variant_new("(us)", len, raw);
+       }
+
+       if (item->trusted_param)
+               g_variant_unref(item->trusted_param);
+       item->trusted_param = g_variant_new("(us)", len, raw);
+
+       bundle_free_encoded_rawdata(&raw);
+
+       _D("Update last data");
+
+       return ES_R_OK;
+}
+
 /**
  * function : send the user-event
  */
@@ -894,9 +930,6 @@ API int eventsystem_send_user_event(const char *event_name, bundle *data,
 {
        int ret = ES_R_OK;
        eventinfo_s *evti = NULL;
-       struct last_data_item *item;
-       bundle_raw *raw = NULL;
-       int len;
        GDBusConnection *conn = NULL;
        GList *trusted_dest_list = NULL;
 
@@ -948,26 +981,9 @@ API int eventsystem_send_user_event(const char *event_name, bundle *data,
        evti->is_trusted = is_trusted;
 
        if (__get_gdbus_shared_connection(&conn, G_BUS_TYPE_SESSION, ES_TYPE_USER) == ES_R_OK) {
-               if (bundle_encode(data, &raw, &len)) {
-                       _E("Unable to encode bundle");
-                       ret = ES_R_ERROR;
+               ret = __update_last_data_item(evti, data);
+               if (ret != ES_R_OK)
                        goto out;
-               }
-
-               item = (struct last_data_item *)g_hash_table_lookup(last_data_tbl,
-                               evti->event_name);
-               if (item) {
-                       if (!evti->is_trusted) {
-                               if (item->param)
-                                       g_variant_unref(item->param);
-                               item->param = g_variant_new("(us)", len, raw);
-                       }
-                       if (item->trusted_param)
-                               g_variant_unref(item->trusted_param);
-                       item->trusted_param = g_variant_new("(us)", len, raw);
-               }
-
-               bundle_free_encoded_rawdata(&raw);
 
                if (is_trusted) {
                        if (__eventsystem_request_destination_list(evti->event_name, &trusted_dest_list) < 0) {