From fdbca5b7cb1f233a8266be612fa0aa456d66411c Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 22 Jan 2018 20:40:15 +0900 Subject: [PATCH] Fix memory leaks of dbus Change-Id: Idbd8c5287408817763c44ae894821d5bb0f1a280 Signed-off-by: Suyeon Hwang --- client/stt_dbus.c | 116 +++++++++++++++++++++++++++-------------------------- server/sttd_dbus.c | 6 ++- 2 files changed, 64 insertions(+), 58 deletions(-) diff --git a/client/stt_dbus.c b/client/stt_dbus.c index d674c27..32a9dea 100644 --- a/client/stt_dbus.c +++ b/client/stt_dbus.c @@ -652,10 +652,12 @@ static void __stt_dbus_connection_free() { if (NULL != g_conn_listener) { dbus_connection_close(g_conn_listener); + dbus_connection_unref(g_conn_listener); g_conn_listener = NULL; } if (NULL != g_conn_sender) { dbus_connection_close(g_conn_sender); + dbus_connection_unref(g_conn_sender); g_conn_sender = NULL; } } @@ -766,7 +768,7 @@ int stt_dbus_close_connection() g_fd_handler = NULL; } - if (NULL != g_conn_listener) { + if (NULL != g_conn_listener) { int pid = getpid(); char service_name[64]; @@ -904,9 +906,9 @@ int stt_dbus_request_hello(int uid) } else { SLOG(LOG_DEBUG, TAG_STTC, "[DBUS] dbus: is_exist: False"); msg = dbus_message_new_method_call( - STT_SERVER_CUSTOM_SERVICE_NAME, - STT_SERVER_CUSTOM_SERVICE_OBJECT_PATH, - STT_SERVER_CUSTOM_SERVICE_INTERFACE, + STT_SERVER_CUSTOM_SERVICE_NAME, + STT_SERVER_CUSTOM_SERVICE_OBJECT_PATH, + STT_SERVER_CUSTOM_SERVICE_INTERFACE, STT_METHOD_HELLO); } } @@ -1018,7 +1020,7 @@ int stt_dbus_request_initialize(int uid, bool* silence_supported, bool* credenti SLOG(LOG_ERROR, TAG_STTC, "Fail to get STT client"); return STT_ERROR_OPERATION_FAILED; } - + if (STT_ERROR_SERVICE_RESET != client->reason) { /* add a rule for daemon error */ char rule_err[256] = {0, }; @@ -1071,9 +1073,9 @@ int stt_dbus_request_finalize(int uid) SLOG(LOG_DEBUG, TAG_STTC, "[dbus_info] service name: %s, service object: %s, service interface: %s", g_server_service_name, g_server_service_object, g_server_service_interface); msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_FINALIZE); if (NULL == msg) { @@ -1096,7 +1098,7 @@ int stt_dbus_request_finalize(int uid) } if (NULL != result_msg) { - dbus_message_get_args(result_msg, &err, + dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID); @@ -1127,9 +1129,9 @@ int stt_dbus_request_set_current_engine(int uid, const char* engine_id, bool* si DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_SET_CURRENT_ENGINE); @@ -1162,8 +1164,8 @@ int stt_dbus_request_set_current_engine(int uid, const char* engine_id, bool* si int int_silence_supported = 0; int int_credential_needed = 0; - dbus_message_get_args(result_msg, &err, - DBUS_TYPE_INT32, &result, + dbus_message_get_args(result_msg, &err, + DBUS_TYPE_INT32, &result, DBUS_TYPE_INT32, &int_silence_supported, DBUS_TYPE_INT32, &int_credential_needed, DBUS_TYPE_INVALID); @@ -1204,9 +1206,9 @@ int stt_dbus_request_check_app_agreed(int uid, const char* appid, bool* value) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_CHECK_APP_AGREED); if (NULL == msg) { @@ -1273,9 +1275,9 @@ int stt_dbus_request_get_support_langs(int uid, stt_h stt, stt_supported_languag DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_GET_SUPPORT_LANGS); if (NULL == msg) { @@ -1358,9 +1360,9 @@ int stt_dbus_request_get_default_lang(int uid, char** language) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_GET_CURRENT_LANG); if (NULL == msg) { @@ -1426,9 +1428,9 @@ int stt_dbus_request_set_private_data(int uid, const char* key, const char* data DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_SET_PRIVATE_DATA); if (NULL == msg) { @@ -1496,9 +1498,9 @@ int stt_dbus_request_get_private_data(int uid, const char* key, char** data) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_GET_PRIVATE_DATA); if (NULL == msg) { @@ -1572,9 +1574,9 @@ int stt_dbus_request_is_recognition_type_supported(int uid, const char* type, bo DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_IS_TYPE_SUPPORTED); if (NULL == msg) { @@ -1641,9 +1643,9 @@ int stt_dbus_request_set_start_sound(int uid, const char* file) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_SET_START_SOUND); if (NULL == msg) { @@ -1702,9 +1704,9 @@ int stt_dbus_request_unset_start_sound(int uid) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_UNSET_START_SOUND); if (NULL == msg) { @@ -1767,9 +1769,9 @@ int stt_dbus_request_set_stop_sound(int uid, const char* file) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_SET_STOP_SOUND); if (NULL == msg) { @@ -1828,9 +1830,9 @@ int stt_dbus_request_unset_stop_sound(int uid) DBusMessage* msg; msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_UNSET_STOP_SOUND); if (NULL == msg) { @@ -1894,9 +1896,9 @@ int stt_dbus_request_start(int uid, const char* lang, const char* type, int sile /* create a signal & check for errors */ msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_START); if (NULL == msg) { @@ -1999,9 +2001,9 @@ int stt_dbus_request_stop(int uid) /* create a signal & check for errors */ msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_STOP); if (NULL == msg) { @@ -2011,8 +2013,8 @@ int stt_dbus_request_stop(int uid) SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt stop : uid(%d)", uid); } - dbus_message_append_args(msg, - DBUS_TYPE_INT32, &uid, + dbus_message_append_args(msg, + DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID); #if 1 if (g_conn_sender) { @@ -2079,9 +2081,9 @@ int stt_dbus_request_cancel(int uid) /* create a signal & check for errors */ msg = dbus_message_new_method_call( - g_server_service_name, - g_server_service_object, - g_server_service_interface, + g_server_service_name, + g_server_service_object, + g_server_service_interface, STT_METHOD_CANCEL); if (NULL == msg) { @@ -2091,8 +2093,8 @@ int stt_dbus_request_cancel(int uid) SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt cancel : uid(%d)", uid); } - dbus_message_append_args(msg, - DBUS_TYPE_INT32, &uid, + dbus_message_append_args(msg, + DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID); #if 1 if (g_conn_sender) { diff --git a/server/sttd_dbus.c b/server/sttd_dbus.c index b7566c3..c544bff 100644 --- a/server/sttd_dbus.c +++ b/server/sttd_dbus.c @@ -259,7 +259,7 @@ int sttdc_send_result(int uid, int event, const char** data, int data_count, con snprintf(target_if_name, sizeof(target_if_name), "%s%d", STT_CLIENT_SERVICE_INTERFACE, pid); DBusMessage* msg = NULL; - SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] send result signal : uid(%d), event(%d), result count(%d) result id(%d)", + SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] send result signal : uid(%d), event(%d), result count(%d) result id(%d)", uid, event, data_count, g_internal_result_id); msg = dbus_message_new_signal( @@ -504,14 +504,17 @@ void __sttd_dbus_connection_free() { if (NULL != g_conn_listener) { dbus_connection_close(g_conn_listener); + dbus_connection_unref(g_conn_listener); g_conn_listener = NULL; } if (NULL != g_conn_sender) { dbus_connection_close(g_conn_sender); + dbus_connection_unref(g_conn_sender); g_conn_sender = NULL; } if (NULL != g_conn_custom) { dbus_connection_close(g_conn_custom); + dbus_connection_unref(g_conn_custom); g_conn_custom = NULL; } } @@ -682,6 +685,7 @@ int __sttd_request_custom_dbus_name() } dbus_connection_close(g_conn_custom); + dbus_connection_unref(g_conn_custom); g_conn_custom = NULL; SLOG(LOG_DEBUG, TAG_STTD, "=="); -- 2.7.4