Update the condition race of connection while muse-server respawn 01/147401/1 accepted/tizen/4.0/unified/20170905.175047 submit/tizen_4.0/20170904.104924
authorYoungHun Kim <yh8004.kim@samsung.com>
Mon, 4 Sep 2017 07:58:40 +0000 (16:58 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Mon, 4 Sep 2017 07:58:51 +0000 (16:58 +0900)
Change-Id: Ieea1feeee3a46e164c29c7a44f7b67450350666a

client/src/muse_client.c
core/src/muse_core.c
server/src/muse_server_private.c

index 6b1dd97..a593728 100644 (file)
@@ -40,12 +40,12 @@ int g_muse_client_table_id;
 
 const char *UDS_files[MUSE_CHANNEL_MAX] = {MUSE_SOCK_FILE0, MUSE_SOCK_FILE1};
 
+static gboolean _muse_client_table_remove_func(gpointer key, gpointer value, gpointer user_data);
 static void _muse_client_sigaction(int signo, siginfo_t *siginfo, void *context);
 static void _muse_client_constructor(void) __attribute__((constructor));
 static int _muse_client_new(muse_channel_e channel);
 static void _muse_client_table_new(void);
 static gpointer _muse_client_get_fd_ptr(int sock_fd);
-static gboolean _muse_client_table_remove_func(gpointer key, gpointer value, gpointer user_data);
 
 static gboolean _muse_client_table_remove_func(gpointer key, gpointer value, gpointer user_data)
 {
index 4345bfe..2a87e54 100644 (file)
@@ -398,7 +398,7 @@ bool muse_core_msg_deserialize(
 
        g_return_val_if_fail(key, false);
        g_return_val_if_fail(buf, false);
-       g_return_val_if_fail(m_type >= MUSE_TYPE_INT && m_type < MUSE_TYPE_MAX, FALSE);
+       g_return_val_if_fail(m_type >= MUSE_TYPE_INT && m_type < MUSE_TYPE_MAX, false);
        g_return_val_if_fail(data, false);
 
        jobj = _muse_core_msg_json_tokener_parse_len(buf, parse_len, err);
index 02f1b91..5297c60 100644 (file)
@@ -277,8 +277,6 @@ static gboolean _muse_server_connection_handler(GIOChannel *source, GIOCondition
                return FALSE;
        }
 
-       muse_server_state_unlock();
-
        server_sockfd = g_io_channel_unix_get_fd(source);
 
        client_len = sizeof(client_address);
@@ -286,6 +284,7 @@ static gboolean _muse_server_connection_handler(GIOChannel *source, GIOCondition
        if (client_sockfd == MUSE_ERR) {
                strerror_r(errno, err_msg, MUSE_MAX_MSG_LEN);
                LOGE("[Critical Error : %d] accept failure : %s", errno, err_msg);
+               muse_server_state_unlock();
                muse_server_respawn(SIGABRT);
                return FALSE;
        }
@@ -316,6 +315,8 @@ static gboolean _muse_server_connection_handler(GIOChannel *source, GIOCondition
 
        muse_server_workqueue_get_instance()->add_job(job);
 
+       muse_server_state_unlock();
+
        LOGI("Leave");
        return TRUE;
 out:
@@ -324,6 +325,8 @@ out:
        MUSE_FREE(module);
        MUSE_FREE(job);
 
+       muse_server_state_unlock();
+
        LOGE("FALSE");
        return FALSE;
 }
@@ -344,22 +347,23 @@ static void _muse_server_check_memory(pid_t pid)
        int used_pss_mb = muse_server_system_get_instance()->get_memory_info(pid);
        char err_msg[MUSE_MAX_MSG_LEN] = {'\0',};
 
+       muse_server_state_lock();
+
        if (g_queue_is_empty(muse_server_ipc_get_instance()->module_queue) && server->state != MUSE_SERVER_STATE_IDLE) {
                if (used_pss_mb > muse_server_config_get_instance()->memory_threshold) {
-
-                       muse_server_state_lock();
                        server->state = MUSE_SERVER_STATE_IDLE;
-                       muse_server_state_unlock();
-
                        muse_server_log_process_info(pid);
 
                        snprintf(err_msg, sizeof(err_msg), "[Memory Leak] %d > %d",
                                used_pss_mb, muse_server_config_get_instance()->memory_threshold);
 
                        LOGE("%s", err_msg);
+                       muse_server_state_unlock();
                        muse_server_respawn(SIGTERM);
                }
        }
+
+       muse_server_state_unlock();
 }
 
 static int _muse_server_thread_kill(int signo)