Resolve the respawn bug and update the value of watchdog timeout 27/152727/10
authorYoungHun Kim <yh8004.kim@samsung.com>
Wed, 27 Sep 2017 02:15:49 +0000 (11:15 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Wed, 11 Oct 2017 06:46:10 +0000 (15:46 +0900)
Change-Id: Ic30ace0fc6bfad5e426bc5879afff101cf062acc

server/include/muse_server_private.h
server/include/muse_server_watchdog.h
server/src/muse_server_private.c
server/src/muse_server_signal.c
server/src/muse_server_system.c
server/src/muse_server_watchdog.c

index 2d5b9a5..2fe5c2e 100644 (file)
@@ -49,7 +49,6 @@ typedef struct muse_server {
        GMainLoop *main_loop;
        muse_server_watchdog_t *watchdog;
        muse_server_state_e state;
-       GMutex g_muse_server_lock;
        GMutex g_muse_server_state_lock;
 } muse_server_t;
 
@@ -64,12 +63,11 @@ void muse_server_worker_exit(muse_module_h module);
 void muse_server_respawn(int signo);
 int muse_server_get_pid(muse_module_h module);
 void muse_server_get_local_time(char *buf);
-void muse_server_main_thread_lock(void);
-void muse_server_main_thread_unlock(void);
 void muse_server_state_lock(void);
 void muse_server_state_unlock(void);
 void muse_server_log_process_info(int pid);
 gboolean muse_server_is_log_enabled(void);
+int muse_server_thread_kill(int signo);
 
 #ifdef __cplusplus
 }
index 15aac0e..937adbd 100644 (file)
@@ -28,9 +28,9 @@ extern "C" {
 
 #include "muse_core_internal.h"
 
-#define MUSE_SERVER_WATCHDOG_CHECK_PERIOD 30
+#define MUSE_SERVER_WATCHDOG_CHECK_PERIOD 10
 #define MUSE_SERVER_WATCHDOG_CHECK_COUNT  3
-#define MUSE_SERVER_WATCHDOG_TIMER_PERIOD 10
+#define MUSE_SERVER_WATCHDOG_TIMER_PERIOD 5
 
 typedef struct muse_server_watchdog {
        GMutex lock;
index 243ef06..7a13c22 100644 (file)
@@ -59,7 +59,6 @@ static void _muse_server_create_new_server_from_fd(int fd[], int type);
 static int _muse_server_free(void);
 static int _muse_server_new(muse_channel_e channel);
 static gboolean _muse_server_connection_handler(GIOChannel *source, GIOCondition condition, gpointer data);
-static int _muse_server_thread_kill(int signo);
 
 static int _muse_server_run(void)
 {
@@ -137,7 +136,6 @@ static void _muse_server_create_new_server_from_fd(int fd[], int type)
        server->fd = fd[MUSE_CHANNEL_MSG];
        server->data_fd = fd[MUSE_CHANNEL_DATA];
        server->type = type;
-       g_mutex_init(&server->g_muse_server_lock);
        g_mutex_init(&server->g_muse_server_state_lock);
 
        /*initiate server */
@@ -191,7 +189,6 @@ static int _muse_server_free(void)
        if (remove(MUSE_DEFAULT_PIDFILE) == MUSE_ERR)
                LOGE("remove %s falied", MUSE_DEFAULT_PIDFILE);
 
-       g_mutex_clear(&server->g_muse_server_lock);
        g_mutex_clear(&server->g_muse_server_state_lock);
 
        free(server);
@@ -357,7 +354,7 @@ void muse_server_check_memory(pid_t pid)
                        server->state = MUSE_SERVER_STATE_IDLE;
                        muse_server_log_process_info(pid);
 
-                       snprintf(err_msg, sizeof(err_msg), "[Memory Leak] %d > %d",
+                       snprintf(err_msg, sizeof(err_msg), "[Memory Leak] %d > %d (KB)",
                                used_pss_mb, muse_server_config_get_instance()->memory_threshold);
 
                        LOGE("%s", err_msg);
@@ -369,7 +366,7 @@ void muse_server_check_memory(pid_t pid)
        muse_server_state_unlock();
 }
 
-static int _muse_server_thread_kill(int signo)
+int muse_server_thread_kill(int signo)
 {
        return syscall(__NR_tkill, syscall(__NR_gettid), signo);
 }
@@ -501,12 +498,8 @@ void muse_server_worker_exit(muse_module_h module)
 
        LOGD("Leave");
 
-       muse_server_main_thread_lock();
-
        muse_server_check_memory(muse_server_ipc_get_instance()->pid);
 
-       muse_server_main_thread_unlock();
-
        g_thread_exit(NULL);
 }
 
@@ -517,7 +510,7 @@ void muse_server_respawn(int signo)
        muse_server_state_lock();
        server->state = MUSE_SERVER_STATE_IDLE;
        muse_server_state_unlock();
-       _muse_server_thread_kill(signo);
+       muse_server_thread_kill(signo);
 }
 
 int muse_server_get_pid(muse_module_h module)
@@ -548,18 +541,6 @@ int muse_server_get_platform_info(const char *key, bool *value)
        return muse_server_system_get_instance()->get_platform_info(key, value);
 }
 
-void muse_server_main_thread_lock(void)
-{
-       g_return_if_fail(server);
-       g_mutex_lock(&server->g_muse_server_lock);
-}
-
-void muse_server_main_thread_unlock(void)
-{
-       g_return_if_fail(server);
-       g_mutex_unlock(&server->g_muse_server_lock);
-}
-
 void muse_server_state_lock(void)
 {
        g_return_if_fail(server);
index 7c8b5bb..b5d0cd2 100644 (file)
@@ -37,6 +37,8 @@ struct sigaction muse_pipe_old_action;
 #include <lwipc.h>
 #endif
 
+static GMutex g_muse_signal_lock;
+
 static void _muse_server_signal_handler(int signo);
 static void _muse_server_signal_save_debug_info(pid_t pid);
 static void _muse_server_signal_backtrace(void *arg);
@@ -93,7 +95,7 @@ static void _muse_server_signal_backtrace(void *arg)
        char err_msg[MUSE_MAX_MSG_LEN] = {'\0',};
        char client_buf[MUSE_MAX_MSG_LEN];
 
-       muse_server_main_thread_lock();
+       g_mutex_lock(&g_muse_signal_lock);
 
        LOGE("----------BEGIN MUSE DYING MESSAGE----------");
 
@@ -139,7 +141,7 @@ static void _muse_server_signal_backtrace(void *arg)
 
        LOGE("----------END MUSE DYING MESSAGE----------");
 
-       muse_server_main_thread_unlock();
+       g_mutex_unlock(&g_muse_signal_lock);
 }
 
 static void _muse_server_signal_sigaction(int signo, siginfo_t *si, void *arg)
index 3d5d26b..9e27305 100644 (file)
@@ -225,7 +225,7 @@ static int _muse_server_system_get_memory_info(pid_t pid)
 
        if (MM_ERROR_NONE == ret && info) {
                used_pss_mb = info->pss;
-               LOGD("[%d] Proportional set size %d (byte)", (int)pid, used_pss_mb);
+               LOGD("[%d] Proportional set size %d (KB)", (int)pid, used_pss_mb);
        } else {
                LOGE("Fail to get process (%d) memory %s", (int)pid, get_error_message(ret));
        }
index 19a565c..915e2b1 100644 (file)
@@ -63,7 +63,7 @@ static gpointer muse_server_watchdog_thread(gpointer data)
                        snprintf(err_msg, sizeof(err_msg), "NO RESPONSE OF MAINLOOP");
                        LOGE("%s", err_msg);
                        g_mutex_unlock(&watchdog->lock);
-                       muse_server_respawn(SIGABRT);
+                       muse_server_thread_kill(SIGABRT);
                }
 
                g_mutex_unlock(&watchdog->lock);