Remove only proper dbus match 77/239377/1
authorsooyeon.kim <sooyeon.kim@samsung.com>
Fri, 24 Jul 2020 08:40:49 +0000 (17:40 +0900)
committersooyeon.kim <sooyeon.kim@samsung.com>
Fri, 24 Jul 2020 08:40:49 +0000 (17:40 +0900)
Change-Id: I41bcb8fa422885483b7aec32e31491562d791600
Signed-off-by: sooyeon.kim <sooyeon.kim@samsung.com>
client/tts.c
client/tts_dbus.c
client/tts_dbus.h

index 333e26d..f3e61db 100644 (file)
@@ -575,6 +575,10 @@ int tts_destroy(tts_h tts)
                        } while (0 != ret);
                } else {
                        SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : g_sr(%d) mode(%d)", g_screen_reader, client->mode);
+                       ret = tts_dbus_remove_match(client->mode);
+                       if (0 != ret) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
+                       }
                }
 
                client->before_state = client->current_state;
@@ -1292,6 +1296,10 @@ int tts_unprepare(tts_h tts)
                } while (0 != ret);
        } else {
                SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : g_sr(%d) mode(%d)", g_screen_reader, client->mode);
+               ret = tts_dbus_remove_match(client->mode);
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
+               }
        }
 
        client->before_state = client->current_state;
@@ -2631,6 +2639,7 @@ int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
 
                                        data->current_state = TTS_STATE_CREATED;
                                        data->reason = 0;
+                                       tts_dbus_remove_match(client->mode);
                                        if (NULL == data->thread) {
                                                SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: start_reprepare_thread");
                                                data->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, NULL, data->tts);
@@ -2672,6 +2681,7 @@ int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
 
                        client->current_state = TTS_STATE_CREATED;
                        client->reason = 0;
+                       tts_dbus_remove_match(client->mode);
                        if (NULL == client->thread) {
                                SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: start_reprepare_thread");
                                client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, NULL, client->tts);
index 9aa09f4..3adfdc5 100644 (file)
@@ -105,9 +105,15 @@ static int __tts_dbus_remove_match(int mode)
                dbus_error_free(&err);
        }
 
+       SLOG(LOG_ERROR, TAG_TTSC, "[INFO] dbus match of mode(%d) is removed", mode);
        return 0;
 }
 
+int tts_dbus_remove_match(int mode)
+{
+       return __tts_dbus_remove_match(mode);
+}
+
 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
 {
        if (NULL == g_conn_listener)    return ECORE_CALLBACK_RENEW;
@@ -230,11 +236,6 @@ 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_TTSC, "@@@ Owner Changed");
 
-                       __tts_dbus_remove_match(TTS_MODE_DEFAULT);
-                       __tts_dbus_remove_match(TTS_MODE_NOTIFICATION);
-                       __tts_dbus_remove_match(TTS_MODE_SCREEN_READER);
-                       __tts_dbus_remove_match(TTS_MODE_INTERRUPT);
-
                        __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
                        SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
                        SLOG(LOG_DEBUG, TAG_TTSC, " ");
@@ -242,6 +243,14 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
 
                else {
                        SLOG(LOG_DEBUG, TAG_TTSC, "Message is NOT valid");
+                       const char* sender = dbus_message_get_sender(msg);
+                       const char* destination = dbus_message_get_destination(msg);
+                       const char* path = dbus_message_get_path(msg);
+                       const char* interf = dbus_message_get_interface(msg);
+                       const char* member = dbus_message_get_member(msg);
+                       int type = dbus_message_get_type(msg);
+                       SLOG(LOG_ERROR, TAG_TTSC, "[INFO] Message is NOT valid, sender(%s), destination(%s), path(%s), interface(%s), member(%s), type(%d)", sender, destination, path, interf, member, type);
+
                        dbus_message_unref(msg);
                        break;
                }
@@ -612,35 +621,28 @@ int tts_dbus_request_initialize(int uid, bool* credential_needed)
        return result;
 }
 
-
 int tts_dbus_request_finalize(int uid)
 {
        DBusMessage* msg;
        DBusError err;
        dbus_error_init(&err);
 
-       /* remove a rule for daemon error */
-       char rule_err[256] = {0, };
        tts_client_s* client = tts_client_get_by_uid(uid);
        if (NULL == client) {
                SLOG(LOG_ERROR, TAG_TTSC, "Fail to get TTS client");
                return TTS_ERROR_OPERATION_FAILED;
        }
 
+       /* remove a rule for daemon error */
+       SLOG(LOG_INFO, TAG_TTSC, "[INFO] Remove match, mode(%d)", client->mode);
        if (TTS_MODE_DEFAULT == client->mode) {
-               snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_SERVER_SERVICE_INTERFACE);
+               __tts_dbus_remove_match(TTS_MODE_DEFAULT);
        } else if (TTS_MODE_NOTIFICATION == client->mode) {
-               snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_NOTI_SERVER_SERVICE_INTERFACE);
+               __tts_dbus_remove_match(TTS_MODE_NOTIFICATION);
        } else if (TTS_MODE_SCREEN_READER == client->mode) {
-               snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_SR_SERVER_SERVICE_INTERFACE);
+               __tts_dbus_remove_match(TTS_MODE_SCREEN_READER);
        } else if (TTS_MODE_INTERRUPT == client->mode) {
-               snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_INTERRUPT_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_TTSC, "Match Error (%s)", err.message);
-               dbus_error_free(&err);
+               __tts_dbus_remove_match(TTS_MODE_INTERRUPT);
        }
 
        msg = __tts_dbus_make_message(uid, TTS_METHOD_FINALIZE);
index a59ebc6..f3ed99f 100644 (file)
@@ -35,6 +35,7 @@ int tts_dbus_request_finalize(int uid);
 
 int tts_dbus_set_sound_type(int uid, int type);
 
+int tts_dbus_remove_match(int mode);
 
 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential);