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;
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
}
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)
{
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 */
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);
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);
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);
}
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);
}
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)
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);
#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);
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----------");
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)