Fix restore logic
[platform/core/uifw/stt.git] / client / stt_dbus.c
index fe1dc72..f6ddbf0 100644 (file)
@@ -617,6 +617,19 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
 
                else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
                        SLOG(LOG_DEBUG, TAG_STTC, "===== Owner Changed");
+                       DBusError err;
+                       dbus_error_init(&err);
+
+                       /* remove a rule for daemon error */
+                       char rule_err[256] = {0, };
+                       snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", g_server_service_interface);
+                       dbus_bus_remove_match(g_conn_listener, rule_err, &err);
+                       dbus_connection_flush(g_conn_listener);
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_STTC, "Match Error (%s)", err.message);
+                               dbus_error_free(&err);
+                       }
+
                        __stt_cb_error(-1, STT_ERROR_SERVICE_RESET, "Daemon Reset");
                        SLOG(LOG_DEBUG, TAG_STTC, "=====");
                        SLOG(LOG_DEBUG, TAG_STTC, " ");
@@ -875,12 +888,12 @@ int stt_dbus_request_hello(int uid)
        }
 
        if (NULL == msg) {
-               SLOG(LOG_ERROR, TAG_STTC, ">>>> Request stt hello : Fail to make message");
-               return STT_ERROR_OPERATION_FAILED;
+//             SLOG(LOG_ERROR, TAG_STTC, ">>>> Request stt hello : Fail to make message");
+               result = stt_dbus_reconnect();
+               if (0 != result)
+                       return STT_ERROR_OPERATION_FAILED;
        }
 
-
-
        if (g_conn_sender) {
                result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, g_waiting_short_time, &err);
                dbus_message_unref(msg);
@@ -907,6 +920,7 @@ int stt_dbus_request_hello(int uid)
                }
        } else {
                SLOG(LOG_WARN, TAG_STTC, "[WARN] dbus connection handle is null (%p)", g_conn_sender);
+               stt_dbus_reconnect();
                result = STT_ERROR_OPERATION_FAILED;
        }
 
@@ -975,7 +989,7 @@ int stt_dbus_request_initialize(int uid, bool* silence_supported, bool* credenti
 
                                /* add a rule for daemon error */
                                char rule_err[256] = {0, };
-                               snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", STT_SERVER_SERVICE_INTERFACE);
+                               snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", g_server_service_interface);
                                dbus_bus_add_match(g_conn_listener, rule_err, &err);
                                dbus_connection_flush(g_conn_listener);
 
@@ -1011,7 +1025,7 @@ int stt_dbus_request_finalize(int uid)
 
        /* remove a rule for daemon error */
        char rule_err[256] = {0, };
-       snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", STT_SERVER_SERVICE_INTERFACE);
+       snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", g_server_service_interface);
        dbus_bus_remove_match(g_conn_listener, rule_err, &err);
        dbus_connection_flush(g_conn_listener);
        if (dbus_error_is_set(&err)) {