From: wn.jang Date: Wed, 8 May 2019 11:55:13 +0000 (+0900) Subject: Fix dbus issue when initialize X-Git-Tag: submit/tizen/20190509.074818^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F09%2F205709%2F5;p=platform%2Fcore%2Fuifw%2Fvoice-control.git Fix dbus issue when initialize Change-Id: I0d3d8461fd2e1a25ea35bf941ff91353a7913978 Signed-off-by: wn.jang --- diff --git a/client/vc_dbus.c b/client/vc_dbus.c index 5b7e47d..c78d5db 100644 --- a/client/vc_dbus.c +++ b/client/vc_dbus.c @@ -21,6 +21,7 @@ static pthread_mutex_t g_dbus_mutex = PTHREAD_MUTEX_INITIALIZER; static int g_waiting_time = 3000; +static int g_waiting_short_time = 200; static bool g_is_connection_opened = false; static Ecore_Fd_Handler* g_fd_handler = NULL; @@ -475,7 +476,7 @@ int vc_dbus_request_hello() DBusMessage* result_msg = NULL; int result = 0; - result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, -1, &err); + result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, g_waiting_short_time, &err); if (dbus_error_is_set(&err)) { SLOG(LOG_DEBUG, TAG_VCC, "[ERROR] Dbus Error (%s)", err.message); //LCOV_EXCL_LINE @@ -529,9 +530,12 @@ int vc_dbus_request_initialize(int pid, int* mgr_pid, int* service_state, int* d result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, g_waiting_time, &err); dbus_message_unref(msg); + SLOG(LOG_DEBUG, TAG_VCC, "[DEBUG] Receive the reply for initializing"); + if (dbus_error_is_set(&err)) { SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Dbus Error (%s)", err.message); //LCOV_EXCL_LINE dbus_error_free(&err); + return VC_ERROR_OPERATION_FAILED; } if (NULL != result_msg) { @@ -558,6 +562,8 @@ int vc_dbus_request_initialize(int pid, int* mgr_pid, int* service_state, int* d *service_state = tmp_service_state; *daemon_pid = tmp_daemon_pid; + SLOG(LOG_DEBUG, TAG_VCC, "[DEBUG] Get arguments for initializing"); + /* add a rule for daemon error */ char rule[256] = {0, }; snprintf(rule, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE); @@ -570,12 +576,7 @@ int vc_dbus_request_initialize(int pid, int* mgr_pid, int* service_state, int* d return VC_ERROR_NONE; } } - dbus_bus_add_match(g_conn_listener, rule, &err); - - if (dbus_error_is_set(&err)) { - SLOG(LOG_ERROR, TAG_VCC, "Match Error (%s)", err.message); //LCOV_EXCL_LINE - dbus_error_free(&err); - } + dbus_bus_add_match(g_conn_listener, rule, NULL); SLOG(LOG_DEBUG, TAG_VCC, "@@ vc initialize : result = %d mgr = %d service = %d daemon_pid = %d", result, *mgr_pid, *service_state, *daemon_pid); //LCOV_EXCL_LINE } else { diff --git a/client/vc_mgr_dbus.c b/client/vc_mgr_dbus.c index 3e334b6..aa20c13 100644 --- a/client/vc_mgr_dbus.c +++ b/client/vc_mgr_dbus.c @@ -24,6 +24,7 @@ static pthread_mutex_t g_m_dbus_mutex = PTHREAD_MUTEX_INITIALIZER; static int g_m_waiting_time = 3000; +static int g_m_waiting_short_time = 200; static bool g_is_connection_opened = false; static Ecore_Fd_Handler* g_m_fd_handler = NULL; @@ -874,7 +875,7 @@ int vc_mgr_dbus_request_hello() DBusMessage* result_msg = NULL; int result = 0; - result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, -1, &err); + result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_short_time, &err); if (dbus_error_is_set(&err)) { SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message); @@ -1011,12 +1012,7 @@ int vc_mgr_dbus_request_initialize(int pid, int audio_streaming_mode, int* servi return VC_ERROR_NONE; } } - dbus_bus_add_match(g_m_conn_listener, rule_err, &err); - - if (dbus_error_is_set(&err)) { - SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message); - dbus_error_free(&err); - } + dbus_bus_add_match(g_m_conn_listener, rule_err, NULL); SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d", result, *service_state, *foreground, *daemon_pid); diff --git a/client/vc_widget_dbus.c b/client/vc_widget_dbus.c index bd25de1..eddeb77 100644 --- a/client/vc_widget_dbus.c +++ b/client/vc_widget_dbus.c @@ -26,6 +26,7 @@ static pthread_mutex_t g_w_dbus_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t g_w_init_mutex = PTHREAD_MUTEX_INITIALIZER; static int g_w_waiting_time = 3000; +static int g_w_waiting_short_time = 200; static bool g_is_connection_opened = false; static Ecore_Fd_Handler* g_w_fd_handler = NULL; @@ -505,7 +506,7 @@ int vc_widget_dbus_request_hello() DBusMessage* result_msg = NULL; int result = 0; - result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, -1, &err); + result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_short_time, &err); if (dbus_error_is_set(&err)) { if (!strncmp(err.name, DBUS_ERROR_SERVICE_UNKNOWN, strlen(err.name))) @@ -603,14 +604,8 @@ int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_p return VC_ERROR_NONE; } } - dbus_bus_add_match(g_w_conn_listener, rule_err, &err); - if (dbus_error_is_set(&err)) { - SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message); - dbus_error_free(&err); - pthread_mutex_unlock(&g_w_init_mutex); - return VC_ERROR_OPERATION_FAILED; - } + dbus_bus_add_match(g_w_conn_listener, rule_err, NULL); SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid); } else { diff --git a/common/vc_cmd_db.c b/common/vc_cmd_db.c index 164dff8..0fee6eb 100644 --- a/common/vc_cmd_db.c +++ b/common/vc_cmd_db.c @@ -391,9 +391,6 @@ static int __vc_db_get_commands(sqlite3* db_handle, int pid, vc_cmd_type_e type, if (VC_COMMAND_TYPE_BACKGROUND == type && 0 == strncmp(appid, temp_text, strlen(appid))) { SLOG(LOG_DEBUG, vc_db_tag(), "Skip get background commands when app is foreground, appid(%s)", appid); - free(temp_text); - temp_text = NULL; - vc_cmd_destroy(temp_cmd); temp_cmd = NULL; @@ -405,11 +402,6 @@ static int __vc_db_get_commands(sqlite3* db_handle, int pid, vc_cmd_type_e type, } } - if (NULL != temp_text) { - free(temp_text); - temp_text = NULL; - } - temp = sqlite3_column_int(stmt, 0); vc_cmd_set_id(temp_cmd, temp); @@ -870,10 +862,6 @@ static int __vc_db_get_result(sqlite3* db_handle, char** result_text, int* event __vc_db_extract_unfixed_command(*result_text, temp_fixed, &temp_unfixed); vc_cmd_set_command(temp_cmd, temp_fixed); vc_cmd_set_unfixed_command(temp_cmd, temp_unfixed); - if (NULL != temp_unfixed) { - free(temp_unfixed); - temp_unfixed = NULL; - } } else { vc_cmd_set_command(temp_cmd, temp_command); } @@ -1773,6 +1761,7 @@ static int __vc_db_insert_command(sqlite3* db_handle, int pid, vc_cmd_type_e typ g_slist_free(cmd_list); SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to insert command, %d", ret); + vc_cmd_destroy((vc_cmd_h)tmp_cmd); return ret; } cmd_list = NULL; diff --git a/server/vcd_dbus.c b/server/vcd_dbus.c index b77b19c..462f1a6 100644 --- a/server/vcd_dbus.c +++ b/server/vcd_dbus.c @@ -1079,6 +1079,7 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle /* loop again if we haven't read a message */ if (NULL == msg) { + SLOG(LOG_INFO, TAG_VCD, "@@@ no Dbus message anymore"); break; } @@ -1317,24 +1318,12 @@ int vcd_dbus_open_connection() } /* Flush messages which are received before fd event handler registration */ - while (DBUS_DISPATCH_DATA_REMAINS == dbus_connection_get_dispatch_status(g_conn_listener)) { + while (DBUS_DISPATCH_COMPLETE != dbus_connection_get_dispatch_status(g_conn_listener)) { + SLOG(LOG_DEBUG, TAG_VCD, "Dbus data is remained, g_conn_listener(%p)", g_conn_listener); listener_event_callback(NULL, NULL); } - /* add a rule for getting signal */ - char rule[128]; - snprintf(rule, 128, "type='signal',interface='%s'", VC_SERVER_SERVICE_INTERFACE); - - /* add a rule for which messages we want to see */ - dbus_bus_add_match(g_conn_listener, rule, &err);/* see signals from the given interface */ - - if (dbus_error_is_set(&err)) { - SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] dbus_bus_add_match() : %s", err.message); - dbus_error_free(&err); - __vcd_dbus_connection_free(); - return VCD_ERROR_OPERATION_FAILED; - } - + /* add fd handler to receive dbus metohd */ int fd = 0; if (1 != dbus_connection_get_unix_fd(g_conn_listener, &fd)) { SLOG(LOG_ERROR, TAG_VCD, "fail to get fd from dbus "); @@ -1344,7 +1333,6 @@ int vcd_dbus_open_connection() SLOG(LOG_DEBUG, TAG_VCD, "Get fd from dbus : %d", fd); } - g_dbus_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, g_conn_listener, NULL, NULL); if (NULL == g_dbus_fd_handler) { @@ -1353,6 +1341,22 @@ int vcd_dbus_open_connection() return VCD_ERROR_OPERATION_FAILED; } + /* add a rule for getting signal */ + char rule[128]; + snprintf(rule, 128, "type='signal',interface='%s'", VC_SERVER_SERVICE_INTERFACE); + + /* add a rule for which messages we want to see */ + dbus_bus_add_match(g_conn_listener, rule, &err);/* see signals from the given interface */ + + if (dbus_error_is_set(&err)) { + SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] dbus_bus_add_match() : %s", err.message); + dbus_error_free(&err); + __vcd_dbus_connection_free(); + return VCD_ERROR_OPERATION_FAILED; + } + + SLOG(LOG_INFO, TAG_VCD, "[INFO] Success to open dbus connection"); + return 0; } diff --git a/server/vcd_server.c b/server/vcd_server.c index fe5f960..41deae9 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -548,10 +548,9 @@ int vcd_send_result(vce_result_event_e event, int* result_id, int count, const c filtered_count = 1; top_priority = temp_cmd->priority; } - - vc_cmd_destroy((vc_cmd_h)temp_cmd); - temp_cmd = NULL; } + vc_cmd_destroy((vc_cmd_h)temp_cmd); + temp_cmd = NULL; } // ASR consume @@ -1251,6 +1250,12 @@ int vcd_initialize(vce_request_callback_s *callback) /* Initialize manager info */ vcd_client_manager_unset(); + /* Open dbus connection */ + if (0 != vcd_dbus_open_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to open connection"); + return VCD_ERROR_OPERATION_FAILED; + } + vcd_config_set_service_state(VCD_STATE_READY); // vcdc_send_service_state(VCD_STATE_READY); diff --git a/server/vce.c b/server/vce.c index cc9f73f..3b89000 100644 --- a/server/vce.c +++ b/server/vce.c @@ -151,11 +151,11 @@ int vce_main(int argc, char** argv, vce_request_callback_s *callback) return VCE_ERROR_OPERATION_FAILED; } - if (0 != vcd_dbus_open_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to open connection"); - ecore_shutdown(); - return VCE_ERROR_OPERATION_FAILED; - } + // if (0 != vcd_dbus_open_connection()) { + // SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to open connection"); + // ecore_shutdown(); + // return VCE_ERROR_OPERATION_FAILED; + // } ret = vcd_initialize(callback); if (0 != ret) {