summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYunmi Ha <yunmi.ha@samsung.com>2016-12-13 19:27:50 +0900
committerYunmi Ha <yunmi.ha@samsung.com>2016-12-13 19:35:18 +0900
commit2ec6e7d851c11aa5f045426b8165adb65e2ffc9c (patch)
tree53387a8271f84edab7cba377fb6a1aad86303f24
parent3c49607ce6f0b22bacc04fa7efa5603bb2752513 (diff)
downloadtlm-accepted/tizen/3.0/ivi/20161215.043051.tar.gz
tlm-accepted/tizen/3.0/ivi/20161215.043051.tar.bz2
tlm-accepted/tizen/3.0/ivi/20161215.043051.zip
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>
-rwxr-xr-xsrc/daemon/tlm-main.c16
-rwxr-xr-x[-rw-r--r--]src/daemon/tlm-manager.c30
2 files changed, 35 insertions, 11 deletions
diff --git a/src/daemon/tlm-main.c b/src/daemon/tlm-main.c
index ab74eec..21fe477 100755
--- a/src/daemon/tlm-main.c
+++ b/src/daemon/tlm-main.c
@@ -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));
diff --git a/src/daemon/tlm-manager.c b/src/daemon/tlm-manager.c
index 8ba4ec8..72e7bed 100644..100755
--- a/src/daemon/tlm-manager.c
+++ b/src/daemon/tlm-manager.c
@@ -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,