Fix dbus issue when initialize 09/205709/5 submit/tizen/20190509.074818
authorwn.jang <wn.jang@samsung.com>
Wed, 8 May 2019 11:55:13 +0000 (20:55 +0900)
committerwn.jang <wn.jang@samsung.com>
Thu, 9 May 2019 07:31:09 +0000 (16:31 +0900)
Change-Id: I0d3d8461fd2e1a25ea35bf941ff91353a7913978
Signed-off-by: wn.jang <wn.jang@samsung.com>
client/vc_dbus.c
client/vc_mgr_dbus.c
client/vc_widget_dbus.c
common/vc_cmd_db.c
server/vcd_dbus.c
server/vcd_server.c
server/vce.c

index 5b7e47d..c78d5db 100644 (file)
@@ -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 {
index 3e334b6..aa20c13 100644 (file)
@@ -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);
index bd25de1..eddeb77 100644 (file)
@@ -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 {
index 164dff8..0fee6eb 100644 (file)
@@ -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;
index b77b19c..462f1a6 100644 (file)
@@ -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;
 }
 
index fe5f960..41deae9 100644 (file)
@@ -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);
 
index cc9f73f..3b89000 100644 (file)
@@ -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) {