Add error handling code 82/104482/1 accepted/tizen/3.0/common/20161215.162450 accepted/tizen/3.0/ivi/20161215.043051 accepted/tizen/3.0/mobile/20161215.042954 accepted/tizen/3.0/tv/20161215.043023 accepted/tizen/3.0/wearable/20161215.043047 submit/tizen_3.0/20161214.024840
authorYunmi Ha <yunmi.ha@samsung.com>
Tue, 13 Dec 2016 10:27:50 +0000 (19:27 +0900)
committerYunmi Ha <yunmi.ha@samsung.com>
Tue, 13 Dec 2016 10:35:18 +0000 (19:35 +0900)
When fail to get system bus, TLM makes core dump.

Reason: tlm doesn't check any dbus connection.
Solution: Add connection checking logic.
tlm must be connected to dbus service.
So If tlm failed to connect dbus, it will be shut down.

Change-Id: If5b35fdc8e950c1ea3062df76c6eb16ae4c09b21
Signed-off-by: Yunmi Ha <yunmi.ha@samsung.com>
src/daemon/tlm-main.c
src/daemon/tlm-manager.c [changed mode: 0644->0755]

index ab74eec916c33d236c03b6e0eb02bcadf4eb7e94..21fe477b2f3bf424ad81510e3179c6ede1f1e5c3 100755 (executable)
@@ -145,10 +145,18 @@ int main(int argc, char *argv[])
 
     manager = tlm_manager_new (username);
     if (manager) {
-        _setup_unix_signal_handlers (manager);
-
-        if (TRUE == tlm_manager_start (manager)) {
-            g_main_loop_run (main_loop);
+        GValue value = G_VALUE_INIT;
+        g_value_init (&value, G_TYPE_BOOLEAN);
+        g_object_get_property(G_OBJECT(manager),"dbus-connected", &value);
+
+        if (g_value_get_boolean(&value)) {
+            _setup_unix_signal_handlers (manager);
+
+            if (TRUE == tlm_manager_start (manager)) {
+                g_main_loop_run (main_loop);
+            }
+        } else {
+            CRITICAL("Fail to get system bus!!! Shut down the tlm");
         }
 
         g_object_unref (G_OBJECT(manager));
old mode 100644 (file)
new mode 100755 (executable)
index 8ba4ec8..72e7bed
@@ -73,6 +73,7 @@ struct _TlmManagerPrivate
 enum {
     PROP_0,
     PROP_INITIAL_USER,
+    PROP_DBUS_CONNECTED,
     N_PROPERTIES
 };
 static GParamSpec *pspecs[N_PROPERTIES];
@@ -169,6 +170,12 @@ _manager_get_property (GObject *obj,
         case PROP_INITIAL_USER:
             g_value_set_string (value, manager->priv->initial_user);
             break;
+        case PROP_DBUS_CONNECTED:
+            if (manager->priv->connection)
+                g_value_set_boolean (value, TRUE);
+            else
+                g_value_set_boolean (value, FALSE);
+            break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
     }
@@ -184,7 +191,7 @@ tlm_manager_constructor (GType gtype, guint n_prop, GObjectConstructParam *prop)
     manager = G_OBJECT_CLASS (tlm_manager_parent_class)->
                                     constructor (gtype, n_prop, prop);
     g_object_add_weak_pointer (G_OBJECT(manager), (gpointer*)&manager);
-    
+
     return manager;
 }
 
@@ -207,6 +214,14 @@ tlm_manager_class_init (TlmManagerClass *klass)
                              "User name for initial auto-login",
                              NULL,
                              G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+
+    pspecs[PROP_DBUS_CONNECTED] =
+        g_param_spec_boolean ("dbus-connected",
+                              "dbus connected",
+                              "dbus connected",
+                              FALSE,
+                              G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
     g_object_class_install_properties (g_klass, N_PROPERTIES, pspecs);
 
     signals[SIG_SEAT_ADDED] =  g_signal_new ("seat-added",
@@ -415,12 +430,6 @@ tlm_manager_init (TlmManager *manager)
     TlmManagerPrivate *priv = TLM_MANAGER_PRIV (manager);
 
     priv->config = tlm_config_new ();
-    priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
-    if (!priv->connection) {
-        CRITICAL ("error getting system bus: %s", error->message);
-        g_error_free (error);
-        return;
-    }
 
     priv->seats = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
                                          (GDestroyNotify)g_object_unref);
@@ -437,6 +446,13 @@ tlm_manager_init (TlmManager *manager)
                                                           "default"));
     _load_auth_plugins (manager);
 
+    priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+        if (!priv->connection) {
+            CRITICAL ("error getting system bus: %s", error->message);
+            g_error_free (error);
+            return;
+    }
+
     /* delete tlm runtime directory */
     tlm_utils_delete_dir (TLM_DBUS_SOCKET_PATH);
     priv->dbus_observer = TLM_DBUS_OBSERVER (tlm_dbus_observer_new (manager,