diff options
author | Yunmi Ha <yunmi.ha@samsung.com> | 2016-12-13 19:27:50 +0900 |
---|---|---|
committer | Yunmi Ha <yunmi.ha@samsung.com> | 2016-12-13 19:35:18 +0900 |
commit | 2ec6e7d851c11aa5f045426b8165adb65e2ffc9c (patch) | |
tree | 53387a8271f84edab7cba377fb6a1aad86303f24 | |
parent | 3c49607ce6f0b22bacc04fa7efa5603bb2752513 (diff) | |
download | tlm-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 |
Add error handling codesubmit/tizen_3.0/20161214.024840accepted/tizen/3.0/wearable/20161215.043047accepted/tizen/3.0/tv/20161215.043023accepted/tizen/3.0/mobile/20161215.042954accepted/tizen/3.0/ivi/20161215.043051accepted/tizen/3.0/common/20161215.162450
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-x | src/daemon/tlm-main.c | 16 | ||||
-rwxr-xr-x[-rw-r--r--] | src/daemon/tlm-manager.c | 30 |
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, |